生成格雷码 转自leetcode
2015-09-07 00:07
274 查看
在一组数的编码中,若两个相邻的代码中只有一个二进制数不同,则称这种编码为格雷码。
下面尝试使用递归的方法来生成格雷码
举例说明: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,并压入
下面尝试使用递归的方法来生成格雷码
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,并压入
相关文章推荐
- Uva10474-STL水题-白书
- [LinkerScript.12] 符号赋值: 源代码引用- Assigning Values to Symbols: SourceCodeReferenceq边接
- Android开发过程中遇到的问题
- node.js AES/ECB/PKCS5Padding 与其他语言的加密解密通用
- 带我家小子学编程 01
- 敏捷开发之Scrum扫盲篇
- 四舍五入处理
- 网页上获取MAC地址与计算机名称
- How to detect the types of executable files
- lucene学习笔记02-基本索引
- zoj3738 Buy the Pets(人、猫、狗 DP)
- poj1005 解题报告
- DOS:cd命令
- HDU4288-STL模拟
- centos常用指令之用户和权限
- HDU 2415 Bribing FIPA(树形背包)
- uva 1645 count
- 计算机网络面试题
- 要做一个「程序员」还是「代码生成器」,值得思考?
- 欢迎使用CSDN-markdown编辑器