leetcode39 组合总和
题目是一个子集树的回溯,有两个注意点:结果只需保留非递减排序的那种结果组合;List<>没有clone方法,而ArrayList<>具有此方法。
代码:
class Solution {
ArrayList<Integer> res = new ArrayList();
List<List<Integer>> ans = new ArrayList();
void trackBack(int sum,int target,int[] candidates,int min){
if(sum == target){
ans.add((List<Integer>) res.clone());
}else{
for(int i : candidates){
if(i < min) continue;
sum += i;
res.add(i);
if(sum <= target){
trackBack(sum, target, candidates, i);
}
sum -= i;
res.remove(res.size()-1);
}
}
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
trackBack(0, target, candidates, 0);
return ans;
}
}
5ms 38.6MB