题解 | #加起来和为目标值的组合(二)#
加起来和为目标值的组合(二)
http://www.nowcoder.com/practice/75e6cd5b85ab41c6a7c43359a74e869a
class Solution {
public:
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
vector<vector<int>> res;
vector<int> path;
sort(num.begin(), num.end());
dfs(num, target, res, path, 0, 0);
return res;
}
void dfs(vector<int> &num, int target, vector<vector<int>>& res,
vector<int>& path, int cur_sum, int index){
if(cur_sum==target){
res.push_back(path);
return;
}// 剪枝 && 从index开始
for(int i=index; i<num.size()&&num[i]+cur_sum <= target; i++){
if(i>index && num[i]==num[i-1])
continue;
path.push_back(num[i]);
cur_sum += num[i];
dfs(num, target, res, path, cur_sum, i+1);
cur_sum -= num[i];
path.pop_back();
}
}
};

查看21道真题和解析