您的位置:首页 > 其它

生成格雷码 转自leetcode

2015-09-07 00:07 274 查看
在一组数的编码中,若两个相邻的代码中只有一个二进制数不同,则称这种编码为格雷码。

下面尝试使用递归的方法来生成格雷码

vector<int> GrayCode(int n){//n表示格雷码的位数
if(n==0)
return vector<int>(1)//返回只有一个0的容器
vector<int> res=GrayCode(n-1);//采用递归方法
for(int i=res.size()-1 ; i >=0 ;i-- )//采用从后往前的方式
res.push_back(res[i]+(i<<(n-1)));
return res;
}


  举例说明:n==0时 res={0}

n==1时 res={0,1}//相当于在n==0的情况的基础上,从后往前在第0位加1,并压入

n==2时 res={0,1,11,10} //相当于在n==1情况的基础上,从后往前在第1位加1,并压入

n==3时 res={0,1,11,10,110,111,101,100}//相当于在n==2的基础上,从后往前在第二位加1,并压入

n==4时 res={0,1,11,10,110,111,101,100,1100,1101,1111,1110,1010,1011,1001,1000}//相当于在n==3的基础上,从后往前在第3位上加1,并压入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: