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

集合的所有子集

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;
    }
};




全部评论

相关推荐

神哥不得了:神哥来啦~1.建议不要包装,很容易问穿2.没日常也能找到暑期3.简历模板换一下,字体和版式看着好难受,而且最好压缩到一页,技术的倒数第2和3重复啦,项目建议换两个高质量的上去,如果时间够的话,八股就把高频top50的题目多巩固几遍,吃透,注意不要找假高频,这样绝对能找到暑期
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务