pull/6/head
yuanguangxin 5 years ago
parent a898a5e7c3
commit 361277d7b0

@ -101,6 +101,7 @@
* [q10_正则表达式匹配](/src/回溯法/q10_正则表达式匹配) * [q10_正则表达式匹配](/src/回溯法/q10_正则表达式匹配)
* [q22_括号生成](/src/回溯法/q22_括号生成) * [q22_括号生成](/src/回溯法/q22_括号生成)
* [q40_组合总和2](/src/回溯法/q40_组合总和2)
* [q46_全排列](/src/回溯法/q46_全排列) * [q46_全排列](/src/回溯法/q46_全排列)
### 树的遍历 ### 树的遍历

@ -0,0 +1,38 @@
package .q40_2;
import java.util.*;
/**
* O(n*log(n))
*/
class Solution {
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<>();
if (candidates.length == 0) {
return res;
}
Arrays.sort(candidates);
helper(candidates, target, 0, new LinkedList<>(), res);
return res;
}
public void helper(int[] candidates, int target, int start, LinkedList<Integer> stack, List<List<Integer>> res) {
if (start > candidates.length) {
return;
}
if (target == 0 && !stack.isEmpty()) {
List<Integer> item = new ArrayList<>(stack);
res.add(item);
}
HashSet<Integer> set = new HashSet<>();
for (int i = start; i < candidates.length; ++i) {
if (!set.contains(candidates[i]) && target >= candidates[i]) {
stack.push(candidates[i]);
helper(candidates, target - candidates[i], i + 1, stack, res);
stack.pop();
set.add(candidates[i]);
}
}
}
}
Loading…
Cancel
Save