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

集合的所有子集

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




全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务