美文网首页
一个数组的所有子集

一个数组的所有子集

作者: EternalSunLhx | 来源:发表于2016-08-16 18:11 被阅读102次

    求子集问题就是求组合问题。数组中的n个数可以用n个二进制位表示,当某一位为1表示选择对应的数,为0表示不选择对应的数。

    vector<vector<int> > subsets(vector<int> &S,int n)  
    {  
       //n个数有0~max-1即2^n中组合,1<<n表示2^n  
        int max = 1<<n;  
        vector<vector<int> >result;  
        for(int i = 0;i < max;i++)  
        {  
            vector<int> temp;  
            int idx = 0;  
            int j = i;  
            while(j > 0)  
            {  
                //判断最后一位是否为1,若为1则将对应数加入到当前组合中  
                if(j&1)  
                {  
                    temp.push_back(S[idx]);  
                }  
                idx++;  
                //判断了这一位是否为1后要右移  
                j = j>>1;  
            }  
            //判断完了一种组合,加入到结果集中  
            result.push_back(temp);  
        }  
        return result;  
    }
    

    相关文章

      网友评论

          本文标题:一个数组的所有子集

          本文链接:https://www.haomeiwen.com/subject/quipsttx.html