link

简单双分支 dfs,回撤时记得 pop_back()即可。

lambda 函数内递归调用自身时要用 std::function<returnType(arguement)> 声明,不能用 auto。 详见代码

#include <bits/stdc++.h>

using ll = long long;

auto main()->int {
    std::cin.tie(nullptr)->sync_with_stdio(false);
    
    int n;
    std::cin >> n;

    std::vector<int> res;
    std::function<void(int)> dfs = [&](int x) {
        if (x > n) {
            for (auto x : res) {
                std::cout << x << " ";
            }
            std::cout << "\n";
            return ;
        }
        res.push_back(x);
        dfs(x + 1);
        res.pop_back();
        dfs(x + 1);
    };

    dfs(1);
    
    return 0;
}

注意有 SPJ 哦~

3min +\textbf{\textcolor{#37A01D}{+}}