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 发布
本文详细解析了LintCode上的组合总和(Combination Sum)问题的解决方案,通过递归算法实现,介绍了如何从候选数字中找出所有可能的组合,使得这些组合的数字之和等于目标值。特别注意的是,候选数字可以无限次被使用,但返回的解集不能包含重复的组合。
873

被折叠的 条评论
为什么被折叠?



