题目通道:https://leetcode.cn/problems/combination-sum-ii/description/
题目描述
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用 一次 。
注意:解集不能包含重复的组合。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> res = new ArrayList<>();
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
Arrays.sort(candidates);
dfs(candidates, target, 0, 0);
return ans;
}
void dfs(int[] nums, int target, int sum, int k) {
if (sum == target) {
ans.add(new ArrayList<>(res));
return;
}
if (k == nums.length) return;
if (sum + nums[k] > target) return;//剪枝
for (int i = k; i < nums.length; i++) {
if (i > k && nums[i] == nums[i - 1]) {
continue;
}
res.add(nums[i]);
dfs(nums, target, sum + nums[i], i + 1);
res.remove(res.size() - 1);
}
}
}