本文主要是介绍【组合回溯】【removeLast】Leetcode 39. 组合总和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【组合回溯】【removeLast】Leetcode 39. 组合总和
- 解法1
---------------🎈🎈题目链接🎈🎈-------------------
解法1
如果是一个集合来求组合的话,就需要startIndex
例如:77.组合 (opens new window),216.组合总和III (opens new window)。
如果是多个集合取组合,各个集合之间相互不影响,那么就不用startIndex
例如:17.电话号码的字母组合
1
对于ArrayList 移除最后一个元素!!!!
arr.removeLast()
或者arr.remove(arr.size()-1)
2
更新加入到result中时,要注意加入的数组需要深拷贝!!!!!!
result.add(new ArrayList<>(resultgroup));
class Solution {List<List<Integer>> result = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {Arrays.sort(candidates);backtracking(candidates,target,0);return result;}int sum = 0;List<Integer> resultgroup = new ArrayList<>();public void backtracking(int[] candidates, int target,int begin){// 终止条件if(sum == target){result.add(new ArrayList<>(resultgroup));return;}for(int i = begin; i < candidates.length; i++){if(sum+candidates[i]>target) continue;sum = sum+candidates[i];resultgroup.add(candidates[i]);backtracking(candidates,target,i);// 递归resultgroup.removeLast(); // 回溯sum = sum-candidates[i];}}
}
这篇关于【组合回溯】【removeLast】Leetcode 39. 组合总和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!