赞
踩
题目描述
给出一组候选数\ C C 和一个目标数\ T T,找出候选数中起来和等于\ T T 的所有组合。
\ C C 中的每个数字在一个组合中只能使用一次。
注意:
示例1
输入
[100,10,20,70,60,10,50],80
返回值
[[10,10,60],[10,20,50],[10,70],[20,60]]
- class Solution {
- public:
- vector<vector<int> > combinationSum2(vector<int> &num, int target) {
- vector<vector<int>> res;
- vector<int> tmp;
- if(num.empty())
- return res;
- sort(num.begin(),num.end());
- dfs(num,target,res,tmp,0); //数组,目标和,res, tmp, 开始的元素下标
- return res;
- }
- void dfs(vector<int> &num, int target, vector<vector<int>> &res, vector<int> &tmp,int start)
- {
- if(target==0){
- res.push_back(tmp);
- return;
- }
- if(start>=num.size()) return;
- for(int i=start;i<num.size();++i){
- if(i>start && num[i]==num[i-1]) //跳过当前重复值
- continue;
- if(num[i]<=target){
- tmp.push_back(num[i]);
- dfs(num,target-num[i],res,tmp,i+1);
- tmp.pop_back(); //恢复
- }
- }
- }
- };
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。