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

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

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

时间: 2024-10-10 08:56:19

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

求一个集合的所有子集问题

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/31042651 作者:小马 一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集). 这种问题一般有两种思路,先说说第一种,递归.递归肯定要基于一个归纳法的思想,这个思想用到了二叉树的遍历,如下图所示: 可以这样理解这张图,从集合A的每

python 实现求一个集合的子集

概要 今天偶然看到有个关于数学中集合的问题,就突发奇想的想用python实现下求一个集合的子集. 准备 我当然先要复习下,什么是集合,什么是子集? 比较粗犷的讲法,集合就是一堆确定的东西,细致一点的讲法呢,就是由一个或多个确定的元素所构成的整体,集合中的东西称为元素. 集合有一些特性: 1.确定性 给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现. 2.互异性 一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.有时需要对同一元素

湘潭大学OJ1199Number Game(求一个集合的最小公倍数)

题目描述 给你一个有N个数的集合S和一个数X,判断是否存在S的一个子集,子集里的数的最小公倍数正好是X. 输入 第一行是数据组数T. 接下来有多组数据,每组数据包含两行: 第一行有2个数N和X,1<=N<=100000 ,X<=10^9. 第二行给出N个数,1<=S[i]<=10^9. 输出 对于每一组数据,输出一行"Case #X: Y",X是第几组数据,Y是Yes或No. 样例输入 2 4 20 2 3 4 5 3 61 3 4 5 样例输出 Case

【C语言】编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。

/*编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数. 例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , 4)函数返回4 */ #include <stdio.h> int yue(int a,int b) { int temp; int n; if (a>b) { temp=a; a=b; b=temp; } n=a; if(a==0) return b; else while(n!=0) { if( a%n==0 &&

枚举一个集合的所有子集

一个神奇的算法,在题目中看到的,单独拿出来整理枚举一个集合S(用一个二进制表示)的所有子集S0: for(int S0 = S; S0; S0 = (S0-1)&S){}

求一个集合的集合下所有集合元素求值

场景是这样的:Order下有一个Suppler的集合,即一个订单下可能有多个供应商:Supplier下有一个Product的集合,即对一个供应商采购多个产品. 需求是这样的:算出所有订购产品的总价 模型这样: public class Order { public int OrderId { get; set; } public ICollection<Supplier> Suppliers { get; set; } public Order() { Suppliers = new List

输出一个集合的所有子集,从长到短

public class Ziji { public static List<List<Integer>> Sets(int a[]) { List<List<Integer>> res = new ArrayList<List<Integer>>(); int len = a.length; int n = 1 << len; for (int i = n; i > 0; i--) { int k = i; Lis

求一个字符串的字节长度

编写一个方法 求一个字符串的字节长度 假设:一个英文字符占用一个字节,一个中文字符占用两个字节 function GetBytes(str){ var len = str.length; var bytes = len; for(var i=0; i<len; i++){ if (str.charCodeAt(i) > 255) bytes++; } return bytes; } alert(GetBytes("你好,as"));

傻瓜方法求集合的全部子集问题(java版)

给定随意长度的一个集合.用一个数组表示,如{"a", "b","c"},求它的全部子集.结果是{ {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c}}和一个空集. 以下讲的就是怎样用一个原始的傻瓜方法(非算法)求它的全部子集. 首先我们知道是它的子集个数是2^length,假设长度是3,那子集就共同拥有2的3次方=8个,包含空集. 求子集,我的做法是对不论什么一项做推断,有或者无,用1和0来相应表示. 那么像这