Given n unique postive integers, number k (1<=k<=n) and target.
Find all possible k integers where their sum is target.
Example
Example 1:
Input: [1,2,3,4], k = 2, target = 5
Output: [[1,4],[2,3]]
Example 2:
Input: [1,3,4,6], k = 3, target = 8
Output: [[1,3,4]]
思路:backtracking的标准模板;
public class Solution {
/*
* @param A: an integer array
* @param k: a postive integer <= length(A)
* @param target: an integer
* @return: A list of lists of integer
*/
public List<List<Integer>> kSumII(int[] A, int k, int target) {
List<List<Integer>> lists = new ArrayList<List<Integer>>();
if(A == null || A.length == 0 || k <= 0) {
return lists;
}
List<Integer> list = new ArrayList<Integer>();
dfs(A, k, target, list, lists, 0, 0, 0);
return lists;
}
private void dfs(int[] A,
int k,
int target,
List<Integer> list,
List<List<Integer>> lists,
int index,
int curSum,
int count) {
if(curSum > target) {
return;
}
if(count == k && curSum == target) {
lists.add(new ArrayList<Integer>(list));
return;
}
for(int i = index; i < A.length; i++) {
list.add(A[i]);
curSum += A[i];
dfs(A, k, target, list, lists, i+1, curSum, count + 1);
curSum -= A[i];
list.remove(list.size()-1);
}
}
}