格雷码(多种方法含递归)

来源:互联网 发布:java第三方服务器ftp 编辑:程序博客网 时间:2024/03/28 18:22
class GrayCode{public:    vector<string> getGray1(int n)    {        vector<string>v;        for(int i=0; i<pow(2,n); i++)        {            string vi;            for(int j=0; j<n; j++)            {                if(((i^(i>>1))>>j)&1)                {                    vi='1'+vi;                }                else                {                    vi='0'+vi;                }            }            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--)                {                    v.push_back('1'+v[j]);                    v[j]='0'+v[j];                }            }        }        return v;    }};

阅读全文
0 0
原创粉丝点击