LeetCode HOT100 - 组合总和
要记录所有可行的方案,一般都是考虑回溯
回溯如果每次都值传递,那么会比较复杂
合适一些的是外侧预先维护好这个数组
接着是这题有一个条件是一个元素是可以任意选择次数的
这种时候的 dfs 就是维护当前位置的元素放还是不放,如果放了,我们可以还可以继续用这个元素,也就是传给下一轮的位置不变
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& a, int target) {
int n = a.size();
vector<vector<int>> ans;
vector<int> tmp;
auto dfs = [&](this auto&& self, int need, int i) -> void {
if (need < 0 || i >= n) return;
if (need == 0) {
ans.emplace_back(tmp);
return;
}
self(need, i + 1);
tmp.emplace_back(a[i]);
self(need - a[i], i);
tmp.pop_back();
};
dfs(target, 0);
return ans;
}
};

浙公网安备 33010602011771号