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;
    }
};
posted @ 2026-04-12 16:18  rdcamelot  阅读(29)  评论(0)    收藏  举报