格雷码(多种方法)

来源:互联网 发布:mac 顿号 编辑:程序博客网 时间:2024/04/28 22:02
class GrayCode{public:    vector<string> getGray1(int n)    {        vector<string>v;        if(n<=0)return v;        int num=pow(2,n);        for(int i=0; i<num; i++)        {            string vi;            for(int j=0; j<n; j++)            {                if(((i^(i>>1))>>j)&1)                {                    vi+='1';                }                else                {                    vi+='0';                }            }            reverse(vi.begin(),vi.end());            v.push_back(vi);        }        return v;    }    vector<string> getGray2(int n)    {        vector<string>v(pow(2,n));        if(n==1)        {            v[0]='0';            v[1]='1';            return v;        }        vector<string>prev=getGray(n-1);        for(int i=0; i<prev.size(); i++)        {            v[i]='0'+prev[i];            v[prev.size()*2-1-i]='1'+prev[i];        }        return v;    }    vector<string> getGray(int n)    {        vector<string>v;        for(int i=0; i<n; i++)        {            if(v.size()==0)v.push_back("0"),v.push_back("1");            else            {                for(int j=v.size()-1; j>=0; j--)                {                    string temp1='0'+v[j];                    string temp2='1'+v[j];                    v[j]=temp1;                    v.push_back(temp2);                }            }        }        return v;    }};