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) {
// 2015-08-31
// A中不含重复元素,每一个元素只可使用一次
// 解集中不可以有重复的解
ArrayList<ArrayList<Integer>> rst = new ArrayList<>();
if (A == null || A.length == 0 || k == 0) {
return rst;
}
ArrayList<Integer> list = new ArrayList<>();
Arrays.sort(A);
helper(rst, list, A, k, target, 0);
return rst;
}
private void helper(ArrayList<ArrayList<Integer>> rst, ArrayList<Integer> list,
int A[], int k, int left, int pos) {
if (list.size() == k && left == 0) {
rst.add(new ArrayList<Integer>(list));
return;
}
if (list.size() >= k) {
return;
}
for (int i = pos; i < A.length; i++) {
if (left - A[i] < 0) {
break;
}
list.add(A[i]);
helper(rst, list, A, k, left - A[i], i + 1);
list.remove(list.size() - 1);
}
return;
}
}
[刷题]k Sum II
最新推荐文章于 2024-06-03 18:24:49 发布