题解 | #加起来和为目标值的组合#
加起来和为目标值的组合
http://www.nowcoder.com/practice/75e6cd5b85ab41c6a7c43359a74e869a
import java.util.Arrays;
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
Arrays.sort(num);
ArrayList<Integer> tmp = new ArrayList<>();
ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
int index = 0;
//回溯算法借助递归
backTracking(num, target, index, tmp, ans);
return ans;
}
public void backTracking(int[] num, int target, int begin, ArrayList<Integer> tmp, ArrayList<ArrayList<Integer>> ans){
if(target == 0){
ans.add(new ArrayList<Integer>(tmp)); //一定注意要new
return;
}
for(int i = begin; i < num.length; i++){
if(target - num[i] < 0){
break;
}
if(i > begin && num[i] == num[i - 1]){
continue;
}
tmp.add(num[i]);
backTracking(num, target - num[i], i + 1, tmp, ans);
tmp.remove(tmp.size() - 1);//回溯避免漏掉可能情况。
}
}
}