Your title here...Given n unique integers, number k (1<=k<=n) and target.
Find all possible k integers where their sum is target.
Example
Given [1,2,3,4]
, k = 2
, target = 5
. Return:
[
[1,4],
[2,3]
]
public class Solution {
/*
* @param A: an integer array
* @param k: a postive integer <= length(A)
* @param targer: an integer
* @return: A list of lists of integer
*/
public List<List<Integer>> kSumII(int[] arr, int k, int target) {
// write your code here
List<List<Integer>> res = new ArrayList<>();
if (arr == null || arr.length < k) {
return res;
}
dfs(arr, k, 0, target, 0, new ArrayList<Integer>(), res);
return res;
}
private void dfs(int[] arr, int k, int start, int target, int sum,
List<Integer> path, List<List<Integer>> res) {
if (path.size() == k && sum == target) {
res.add(new ArrayList<Integer>(path));
return;
}
if (path.size() > k || sum > target) {
return;
}
for (int i = start; i < arr.length; i++) {
path.add(arr[i]);
dfs(arr, k, i + 1, target, sum + arr[i], path, res);
path.remove(path.size() - 1);
}
}
}