1. 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码( Gray Code )。请编写一个函数,使用递归方法生成 N 位的格雷码,并且保证这个函数的健壮性。
这是一道leetcode的原题https://leetcode.com/problems/gray-code/,关于二进制数i对应的格雷码j有如下关系j=i^(i>>1);
比较简单,非递归代码如下:
vector<int> grayCode(int n) {
vector<int> v;
int num=1;
for(int x=0;x<n;x++)
num*=2;
for(int i=0;i<num;i++)
v.push_back(i^(i>>1));
return v;
}
递归代码:
vector<int> grayCode(int n) {
vector<int> v;
if(n==0)
v.push_back(0);
else if(n==1)
{
v.push_back(0);
v.push_back(1);
}
else
{
v=grayCode(n-1);
int x=v.size();
for(int i=x;i<2*x;++i)
v.push_back(i^(i>>1));
}
return v;
}