public class Solution {
/**
* @param candidates: A list of integers
* @param target:An integer
* @return: A list of lists of integers
*/
public List<List<Integer>> combinationSum(int[] candidates, int target) {
// 2015-08-28
// candicates中不含重复元素,元素可以重复使用
// 解集中不可以含相同解
List<List<Integer>> rst = new ArrayList<List<Integer>>();
if (candidates == null || candidates.length == 0) {
return rst;
}
List<Integer> list = new ArrayList<>();
Arrays.sort(candidates);
helper(candidates, rst, list, target, 0);
return rst;
}
private void helper(int[] candidates, List<List<Integer>> rst, List<Integer> list,
int left, int pos) {
if (left == 0) {
rst.add(new ArrayList<Integer>(list));
return;
}
for (int i = pos; i < candidates.length; i++) {
if (left - candidates[i] < 0) {
break;
}
list.add(candidates[i]);
helper(candidates, rst, list, left - candidates[i], i);
list.remove(list.size() - 1);
}
}
}
[刷题]Combination Sum
最新推荐文章于 2021-02-02 17:17:34 发布