题目
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
示例1
输入:
candidates = [2,3,6,7], target = 7,
输出:
[
[7],
[2,2,3]
]
示例2
输入:
candidates = [2,3,5], target = 8,
输出:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
解法
代码
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int>> ans;
vector<int> tmp;
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
dfs(0,target,0,candidates);
return ans;
}
void dfs(int now_id,int target,int now_sum,vector<int> &candidates){
if(now_sum > target){return;}
if(now_sum==target){
ans.push_back(tmp);
return ;
}
for(int i=now_id;i<candidates.size();i++){
now_sum += candidates[i];
tmp.push_back(candidates[i]);
dfs(i,target,now_sum,candidates);
tmp.pop_back();
now_sum -= candidates[i];
}
}
};
int main()
{
vector<int> candidates{2,3,5};
int target = 8;
Solution s;
vector<vector<int>> ans = s.combinationSum(candidates, target);
for(int i=0;i<ans.size();i++){
for(int j=0;j<ans[i].size();j++){
if(j!=0) cout<<",";
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
}
今天也是爱zz的一天哦!