LeetCode:Subsets

来源:互联网 发布:ubuntu terminal 配置 编辑:程序博客网 时间:2024/06/05 16:41

这一题让我想起了大二下学期数据结构的一个课程设计:随机发牌,也是同样运用到了二进制位的思路。这题中的排序就写了个简单的冒泡排序,一次性AC

class Solution {public:    void Sort(vector<int>&S)    {        int num=S.size();        if(num<2)           return;        int i,j;        int flag;        for(i=1;i<num;i++)//i用来记录趟数,每一趟结束确定一个元素位置        {            flag=0;            for(j=1;j<num-i+1;j++)            {                if(S[j-1]>S[j])                {                    S[j-1]=S[j-1]-S[j];                    S[j]=S[j]+S[j-1];                    S[j-1]=S[j]-S[j-1];                    flag=1;                }                          }              if(flag==0)                   return;        }             }    vector<vector<int> > subsets(vector<int> &S) {        //若集合的元素个数是n,则它的幂集个数为2^n,于是可采用将元素排序在n个bit位上,遍历0~2^n,bit位上为1对应的数放入子集。题目要求序列不递减,则需要S排序        vector<vector<int>> result;        if(S.empty())//如果S为空,则在result加入空集,直接返回           {               result.push_back(S);               return result;           }        Sort(S);        int num=pow(2,S.size());        int i;        int j;        vector<int>element;        for(i=0;i<num;i++)        {            element.clear();            for(j=0;j<32;j++)            {                if(i&1<<j)                {                    element.push_back(S[j]);                }            }            result.push_back(element);        }        return result;    }};


0 0
原创粉丝点击