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;
}
};
格雷码(多种方法)
最新推荐文章于 2024-08-13 09:17:48 发布