Java 有一个条件让我很困惑
关于问题: 给定n个不同的正整数、整数k和一个数字 目标。查找以和为目标的k个数字。还多少 有什么解决办法 这里的测试用例是A[]={1,2,3,4},k=2,target=5。 有两种解决方案:[1,4]和[2,3]。 所以返回2 我的代码是:Java 有一个条件让我很困惑,java,microsoft-distributed-file-system,Java,Microsoft Distributed File System,关于问题: 给定n个不同的正整数、整数k和一个数字 目标。查找以和为目标的k个数字。还多少 有什么解决办法 这里的测试用例是A[]={1,2,3,4},k=2,target=5。 有两种解决方案:[1,4]和[2,3]。 所以返回2 我的代码是: public class Solution { private int res = 0; public int kSum(int[] A, int k, int target) { Arrays.sort(A)
public class Solution {
private int res = 0;
public int kSum(int[] A, int k, int target) {
Arrays.sort(A);
DFS(A, k, target, 0 );
return res;
}
private void DFS(int[] A, int k, int target, int idx) {
if (target < 0) return;
if (k == 0) {
if (target == 0) res += 1;
return;
}
for (int i = idx; i < A.length; i++ ) {
DFS(A, k - 1, target - A[i], i + 1);
DFS(A, k, target, i + 1);
}
}
}
致:
private void DFS(int[]A,int k,int target,int idx,List temp){
..
临时添加(A[i]);
DFS(A,k-1,目标-A[i],i+1,temp);
温度移除(温度大小()-1);
然后,结果变得恰到好处,是2,而不是6。
我实在分不清上面的代码和下面的代码有什么区别。
有没有人可以帮我,告诉我为什么上面是错的。
非常感谢。无需添加
“DFS(A、k、target、i+1);”
只需删除这一行。那么为什么,请您解释一下原因,非常感谢!@Peter这是您正在使用的
循环
。第二行不需要,因为循环
将尝试通过目标-a[i]
和k-1
遍历每个元素,并且i+1
也将指定以下内容。
DFS(A, k - 1, target - A[i], i + 1);
DFS(A, k, target, i + 1);
private void DFS(int[] A, int k, int target, int idx, List<Integer> temp) {
..
temp.add(A[i]);
DFS(A, k - 1, target - A[i], i + 1, temp);
temp.remove(temp.size() - 1);