问题:


  给定n个不同的正整数,整数k和一个数字
  目标。在总和为目标的情况下找到k个数字。返回多少
  解决方案有哪些?
  
  这里的测试用例是A [] = {1,2,3,4},k = 2,目标= 5。
  有2个解决方案:[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);
        }
    }
}


对于上面的代码,它给我输出6(不是2);
但是当我从以下更改最后两行时:

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


然后,结果变为正确,为2,而不是6。
我真的不知道上面和下面的代码之间有什么区别。
有没有人可以帮助我,并告诉我上述原因为何。
非常感谢。

最佳答案

无需添加"DFS(A, k, target, i + 1);"
只需删除此行。

10-07 16:55