题目:
我的代码:
class Solution {
public:
vector<vector<int>> vvi;
vector<vector<int>> combinationSum(vector<int>& can, int target) {
sort(can.begin(), can.end());
vector<int> vi;
dfs(can, target, 0, vi);
return vvi;
}
void dfs(vector<int> &can, int target, int i, vector<int> &vi) {
if (target == 0) {
vvi.push_back(vi);
return;
}
for (int j = i; j < can.size(); j++) {
if (target < can[j]) break;
vi.push_back(can[j]);
dfs(can, target-can[j], j, vi);
vi.pop_back();
}
}
};
本题是在一个数组中找出和为某个值的所有组合,可以重复利用数组中的值,这里我用了使用深度优先的方法搜索,并且用一个vector记录向量,找到合适的向量时即将它保存在结果中,并进行回溯操作。