gpt4 book ai didi

java - 使用递归获取数组的子集。 C++ 和 Java 给我不同的结果

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:33 24 4
gpt4 key购买 nike

例如,给定如下的集合 -

S=[1,3] 

我们想要获取具有以下值的列表列表:

[[],[1],[3],[1,3]] 

我将 C++ 与以下代码结合使用,它非常适合我。但是,在我将其更改为 Java 后,代码并没有给我正确的结果。

有什么帮助吗?这是我的 Java 代码:

public static List<List<Integer>> subsetsRecursive(int[] nums){
List<List<Integer>> res = new ArrayList<List<Integer>>();

if(nums.length == 0){
return res;
}
ArrayList<Integer> itemList = new ArrayList<Integer>();

dfs(res, itemList, 0, nums);

return res;
}

private static void dfs(List<List<Integer>> res, ArrayList<Integer> temp, int end, int[] nums) {
if(end == nums.length) {
res.add(temp);
return;
}

temp.add(nums[end]);
dfs(res, temp, end+1, nums);
temp.remove(temp.size()-1);
dfs(res, temp, end+1, nums);
}

这是 C++:

class Solution {
private:
vector<vector<int> >res;
public:
vector<vector<int> > subsets(vector<int> &S) {
res.clear();

vector<int>tmpres;
dfs(S, 0, tmpres);
return res;
}
void dfs(vector<int> &S, int iend, vector<int> &tmpres)
{
if(iend == S.size())
{res.push_back(tmpres); return;}

tmpres.push_back(S[iend]);
dfs(S, iend+1, tmpres);
tmpres.pop_back();

dfs(S, iend+1, tmpres);
}
};

最佳答案

行内res.add(temp); temp 是一个引用。

您每次添加时都在添加对同一个列表 (itemList) 的引用。

尝试将其更改为列表 res.add(new ArrayList(temp)); 以便它复制列表。

关于java - 使用递归获取数组的子集。 C++ 和 Java 给我不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30882600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com