面试题60:递归生成格雷码
来源:互联网 发布:linux man 1 2 3 编辑:程序博客网 时间:2024/05/16 11:50
格雷码:任意相邻的代码只有一位二进制位不同。
每个二进制数为n位,每个二进制数相比,都只有一位二进制码不相同;
比如n=1,{0,1};
n=2,{00,01,11,10};
n=3,{000,001,011,010,110,111,101,100}
思路:
以n=3的情况为例
000
001
011
010
110
111
101
100
在实现的时候,我们可以在上一层加上0或1,用递归来实现。
第一步:产生0和1两个字符串
第二步:在两个字符串前面分别加上0和1,得到00,01,11,10(注意对称)
第三步:在第二步的基础上给每个字符串加上0和1
由上面分析可知:
n位格雷码是基于n-1位格雷码生成的。
#include <iostream>#include <string>#include <vector>#include <map>using namespace std;vector<string> getGray(int n) {if (n == 1){vector<string> re;re.push_back("0");re.push_back("1");return re;}vector<string> last = getGray(n - 1);int curSize = last.size() * 2;vector<string> current(curSize);for (int i = 0; i < last.size(); i++){current[i] = "0" + last[i];current[curSize - 1 - i] = '1' + last[i];}return current;}int main(){vector<string> re = getGray(4);for (int i = 0; i < re.size(); i++)cout << re[i] << endl;return 0;}
0 0
- 面试题60:递归生成格雷码
- 腾讯面试题--生成格雷码
- 面试题-递归
- 递归面试题汇总
- java 递归 面试题
- 递归面试题汇总
- java递归面试题
- 递归面试题
- 递归面试题
- 【面试题】腾讯面试题之生成格雷码
- 笔试面试题之递归
- 【面试题】递归二叉树
- 递归->栈->队列面试题
- 面试题9:递归和非递归
- [面试题] 递增序列生成
- 面试题-随机生成数
- 一道考察递归思想的面试题
- 递归做法(JAVA面试题续)
- Dubbo与Zookeeper、Spring整合使用.
- 测试人员的职业发展
- C#程序员经常用到的10个实用代码片段
- myEclipse破解
- SQL Server 存储过程详解
- 面试题60:递归生成格雷码
- 练习
- 浅谈HTML5
- 微服务(一)
- 【慕课笔记】1-2 初涉MYSQL—MYSQL的安装与配置
- linux重命名文件,rename命令
- shell判断字符串为空
- iOS开发基础 - UICollectionView
- wm_paint 消息详细解析