今天看面经的时候遇到了gray码问题,不懂,就自行百度了一下,看到一个博客对格雷码进行了讲解,十分适合我这种第一次见gray码的,简单易懂,为了方便之后的复盘,我记录了下来。
首先,是格雷码的定义,如下
根据上述的思想,代码如下:
#include<vector>
#include<string>
using namespace std;
vector<string> gray_code(int n)
{
if(n==1)
{
vector<string> v;
v.push_back("0");
v.push_back("1");
return v;
}
else
{
vector<string> v;
vector<string> v1;
v1=gray_code(n-1);
for(int i=0;i<v1.size();i++) //前n-1位按顺序书写,加前缀0
{
v.push_back("0"+v1[i]);
}
for(int i=(v1.size()-1);i>-1;i--)//后n-1位按逆序书写,加前缀1
{
v.push_back("1"+v1[i]);
}
return v;
}
}
int main(int argc,char *argv[])
{
int n;
cout<<"input n:";
cin>>n;
vector<string> v;
v=gray_code(n);
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
}