回溯大法好

集合的所有子集

http://www.nowcoder.com/questionTerminal/c333d551eb6243e0b4d92e37a06fbfc9

同样是回溯...

回溯模板如下:

void backtrack(...) {

    // 递归停止条件

    for (int i = begin; i < end; i++) {
        // 更新状态
        backtrack(...);
        // 回退状态
    }
}

详细代码如下:

class Solution {
public:
    vector<vector<int> > subsets(vector<int> &S) {
        sort(S.begin(), S.end());
        vector<vector<int> > ans;
        int len = S.size();
        vector<int> p;
        vector<bool> visit(len, false);
        for (int i = 0; i <= len; i++) {
            backtrack(S, ans, i, p, visit, 0);
        }
        return ans;
    }
    void backtrack(vector<int> &S , vector<vector<int> > & ans, int size, vector<int> & path, vector<bool> & v, int begin) {
        if (path.size() == size) {
            vector<int> p(path);
            ans.push_back(p);
            return;
        }
        for (int i = begin; i < S.size(); i++) {
            if (!v[i]) {
                v[i] = true;
                path.push_back(S[i]);
                backtrack(S, ans, size, path, v, i+1);
                v[i] = false;
                path.pop_back();
            }
        }
    }
};
全部评论

相关推荐

奔跑的suechil...:怎么评论区这么多打广告的 1.项目考虑是两个,可以加个项目 2.bg一般的话,不建议外卖加点评,99%都过不了简历 3.找项目要么是自己找github好点的开源,要么是评论区找广告去跟着,要么就是星球找项目了 加油友友
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务