问题
思路
这个题目也是dfs,每一层扫描全部的数字。
但是,这个题目有一个限制它是组合,所以每一个元素必须是升序。
需要判断下。
代码
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> arr;
vector< vector<int> > ret;
dfs( candidates, target, 0, arr, ret );
return ret;
}
private:
void dfs( vector<int>& nums, int target, int cur, vector<int>& arr, vector< vector<int> >& ret){
if( cur == target ){
ret.push_back( arr );
}
if( cur > target )
return;
int sz = nums.size();
for(int i = 0; i < sz; ++i){
if( arr.size() > 0 && arr.back() > nums[i] ) continue;
arr.push_back( nums[i] );
dfs( nums, target, cur + nums[i], arr, ret );
arr.pop_back();
}
}
};