K Sum II
给定 n 个不同的正整数,整数 k(1<= k <= n)以及一个目标数字。
在这 n 个数里面找出 K 个数,使得这 K 个数的和等于目标数字,你需要找出所有满足要求的方案。
样例
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
Solution
同Combination Sum II
Complexity
时间复杂度 O(2n )
Code
public class Solution {
/**
* @param A: an integer array.
* @param k: a positive integer (k <= length(A))
* @param target: a integer
* @return a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> kSumII(int A[], int k, int target) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> path = new ArrayList<Integer>();
helper(res, path, A, k, target, 0);
return res;
}
public void helper(ArrayList<ArrayList<Integer>> res, ArrayList<Integer> path, int[] A, int k, int remain, int index) {
if (path.size() == k) {
if (remain == 0) {
res.add(new ArrayList<Integer>(path));
}
return;
}
for (int i=index; i<A.length; i++) {
path.add(A[i]);
helper(res, path, A, k, remain-A[i], i+1);
path.remove(path.size()-1);
}
}
}