题解 | #集合的所有子集#

集合的所有子集

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

回溯法,选择集合中所有元素的组合,注意递归的返回条件是 index > nums.size() 。对于所有的子集还需要进行排序,写lambda表达式,对两个vector进行大小判断。

class Solution {
public:
    vector<vector<int>> result{};
    vector<int> path{};
    void backtrack(const vector<int>& nums, int index){
        if(index>nums.size()) return;
        result.push_back(path);
        for(int i=index;i<nums.size();i++){
            path.push_back(nums[i]);
            backtrack(nums, i+1);
            path.pop_back();
        }
    }
    
    vector<vector<int> > subsets(vector<int> &S) {
        backtrack(S,0);
        auto cmp=[](vector<int>& v1,vector<int>& v2){
            if(v1.empty()) return true;
            else if(v2.empty()) return false;
            if(v1.size()<v2.size()) return true;
            else if(v1.size()>v2.size()) return false;
            else{
                for(int i=0;i<v1.size();i++){
                    if(v1[i]==v2[i]) continue;
                    else return v1[i]<v2[i];
                }
                return true;
            };
        };
        sort(result.begin(),result.end(),cmp);
        return result;
    }
};




全部评论

相关推荐

迷茫的大四🐶:💐孝子启动失败,改为启动咏鹅
点赞 评论 收藏
分享
孙艹肘:校招不给三方直接让实习我都去了,,主打一个在学校呆着也是闲着,不如出来实习一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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