码迷,mamicode.com
首页 > 其他好文 > 详细

求一个集合的全部子集 假设都是Int类型的元素

时间:2018-09-06 23:02:36      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:cal   const   for   amp   int   begin   set   size   sub   

vector<int> int2bin_vec(int n, UL bit_num){
    vector<int> res(bit_num, 0);
    auto it = res.begin() + res.size() - 1;
    while( n != 0){
        *it = (n % 2);
        it--;
        n /= 2;
    }
    return res;
}

vector<int> zero_one2subset(const vector<int>& zero_one, const vector<int>& nums){
    if(zero_one.empty() || nums.empty() || zero_one.size() != nums.size()) return {};
    vector<int> res;
    for(int i = 0; i < zero_one.size(); i++){
        if(zero_one[i] == 1){
            res.emplace_back(nums[i]);
        }
    }
    return res;
}


vector<vector<int>> cal_subset(const vector<int>& nums){
    int subset_size = (1 << nums.size());
    vector<vector<int>> res((UL)subset_size);
    for(int i = 0; i < subset_size; i++){
        vector<int> zero_one = int2bin_vec(i, nums.size());
        vector<int> subset = zero_one2subset(zero_one, nums);
        res[i] = subset;
    }
    sort(res.begin(), res.end());
    return res;
}

求一个集合的全部子集 假设都是Int类型的元素

标签:cal   const   for   amp   int   begin   set   size   sub   

原文地址:https://www.cnblogs.com/theodoric008/p/9601114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!