Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有一个条件让我很困惑_Java_Microsoft Distributed File System - Fatal编程技术网

Java 有一个条件让我很困惑

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)

关于问题:

给定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);
        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);