【发布时间】:2018-07-01 06:12:42
【问题描述】:
我正在研究一个问题,以找出给定列表中的所有整数组合可以总计为给定数字。
public class SumProblem {
/*
* Input 2-2-3-7
* Output 2+2+3 and 7
*/
public static ArrayList<ArrayList<Integer>> find(ArrayList<Integer> input, int requiredSum) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
find(result, requiredSum, 0, new ArrayList<>(), 0, input);
return result;
}
public static void find(ArrayList<ArrayList<Integer>> result , int requiredSum , int currentSum, ArrayList<Integer> partialResult, int i, ArrayList<Integer> input) {
if (currentSum == requiredSum ) {
ArrayList<Integer> temp = new ArrayList<>();
temp = (ArrayList<Integer>) partialResult.clone();
result.add(temp);
return;
}
if (i >= input.size()) {
return;
}
find(result, requiredSum, currentSum , partialResult, i +1, input );
partialResult.add(input.get(i));
find(result, requiredSum, currentSum + input.get(i) , partialResult, i +1, input );
}
public static void main(String[] args) {
ArrayList<Integer> input = new ArrayList<>();
input.add(2);
input.add(1);
input.add(3);
ArrayList<ArrayList<Integer>> output = find(input, 3);
System.out.println(output.toString());
}
}
我在下面写了代码。 我面临一个问题。在下面的代码行中,即使我创建新的 ArrayList 对象并将其分配给 partialResult,它也会将我遍历的所有数字相加。
partialResult.add(input.get(i));
有人可以提出解决方案吗?
【问题讨论】:
-
如果方法中没有任何代码,很难理解你有什么问题,以及你做错了什么甚至有这个问题。 --- 例如“重新开始”是指
partialResult.clear()吗? “将partialResult 转换为结果”是否意味着results.add(new ArrayList<>(partialResult))?如果是这样,您的实际问题是什么?如果不是这样,那是什么? -
@Andreas,我添加了一段示例代码。
-
@Manish 没有足够的代码。显示调用“查找”方法的部分
-
你的意思是像
find (results, new ArrayList<>(), i)吗? -
我在上面添加了完整的代码
标签: java algorithm recursion arraylist