原题地址:https://leetcode-cn.com/problems/combination-sum-ii/description/
题目描述:
给定一个数组 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的每个数字在每个组合中只能使用一次。
说明:
- 所有数字(包括目标数)都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入: candidates =[10,1,2,7,6,1,5]
, target =8
, 所求解集为: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]
示例 2:
输入: candidates = [2,5,2,1,2], target = 5, 所求解集为: [ [1,2,2], [5] ]
解题方法:
class Solution { public: void compute(int start, int target, vector<int>& tmp, vector<int>& candidates, vector<vector<int>>& ans) { int n = candidates.size(); if(target == 0){ ans.push_back(tmp); return; } for(int i = start; i < n; ){ if(target > 0){ tmp.push_back(candidates[i]); compute(i+1, target-candidates[i], tmp, candidates, ans); tmp.pop_back(); } else if(target < 0) return; int j = i; while(candidates[j] == candidates[i]) j ++; i = j; } } vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { vector<vector<int>> ans; vector<int> tmp; int v; sort(candidates.begin(), candidates.end()); compute(0, target, tmp, candidates, ans); return ans; } };