提问人:RAKSHA PADIYAR 提问时间:10/29/2023 最后编辑:RAKSHA PADIYAR 更新时间:10/29/2023 访问量:66
78.LeetCode/Subsets problem - 使用辅助函数接受解决方案,但内存限制超出其他 [closed]
78.LeetCode/Subsets problem - Solution accepted using helper function, but Memory Limit Exceeds otherwise [closed]
问:
我试图使用位操作技术解决 LeetCode 中型问题子集 [链接 (https://leetcode.com/problems/subsets/)。
首先,我实现了如下解决方案:
class Solution {
public List<List<Integer>> subsets(int[] nums) {
int num=(int)Math.pow(2,nums.length);
List<List<Integer>> ans = new ArrayList<>();
for(int i=0;i<num;i++)
{
List<Integer> ls = new ArrayList<>();
int addNum=nums.length-1;
while(i>0)
{
if((i&1)!=0)
{
ls.add(nums[addNum]);
}
addNum--;
i=i>>1;
}
ans.add(ls);
}
return ans;
}
}
此解决方案在运行时出现“超出内存限制”错误。
在检查解决方案部分时,我发现另一个用户实现的解决方案与我的逻辑完全相同,但使用辅助函数。
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> ans=new ArrayList<>();
int num = (int)Math.pow(2,nums.length);
for(int i=0;i<num;i++)
{
List<Integer> ls = helper(i,nums);
ans.add(ls);
}
return ans;
}
public List<Integer> helper(int i, int[] nums)
{
List<Integer> ls = new ArrayList<>();
int j=0;
while(i>0)
{
int rem=i&1;
if(rem==1)
{
ls.add(nums[j]);
}
j++;
i=i>>1;
}
return ls;
}
}
此解决方案被接受。
这两个代码基本上都是一样的。有人可以帮我为什么第一个代码给出超出内存限制。
答:
上一个:使用位板和位操作推送磁贴
下一个:在 Java 中旋转字节中的位
评论