递归生成格雷码----腾讯2016研发工程师编程题
来源:互联网 发布:厦门大学网络课程中心 编辑:程序博客网 时间:2024/06/05 02:48
[编程题] 生成格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。
给定一个整数n,请返回n位的格雷码,顺序为从0开始。
测试样例:
1
返回:["0","1"]
<span style="font-size:18px;">//方法一:递归//递归的思路就是n位gray码是由n-1位gray码生成,举个例子简单一些://比如求n=3的gray码,首先知道n=2的gray码是(00,01,11,10)//那么n=3的gray码其实就是对n=2的gray码首位添加0或1生成的,添加0后变成(000,001,011,010)//添加1后需要顺序反向就变成(110,111,101,100)//组合在一起就是(000,001,011,010,110,111,101,100)class GrayCode {public: vector<string> getGray(int n) { // write code here vector<string> gray; if(n == 1){ gray.push_back("0"); gray.push_back("1"); return gray; } vector<string> last_gray = getGray(n-1); for(int i = 0; i < last_gray.size(); i++) gray.push_back("0"+last_gray[i]); for(int i = last_gray.size()-1; i >= 0; i--) gray.push_back("1"+last_gray[i]); return gray; }}; //方法二:利用公式G(n) = n XOR (n/2),求得gray码的十进制之后再转换成二进制字符串class GrayCode {public: string getbinarystr(int num, int n){ string binarystr = ""; while(num){ int remain = num % 2; stringstream ss; ss << remain; string remainstr; ss >> remainstr; binarystr = remainstr + binarystr; num = num / 2; n--; } while(n--) binarystr = "0" + binarystr; return binarystr; } vector<string> getGray(int n) { // write code here int pown = pow(2, n); vector<string> gray; for(int i = 0; i < pown; i++){ int graynum = i ^ (i/2); string graystr = getbinarystr(graynum,n); gray.push_back(graystr); } return gray; }};</span>
1 0
- 递归生成格雷码----腾讯2016研发工程师编程题
- 生成格雷码(腾讯2016研发工程师编程题)
- 腾讯2016研发工程师编程题生成格雷码
- 腾讯2016研发工程师编程题之生成格雷码
- 腾讯2016研发工程师编程题——生成格雷码
- 腾讯2016研发工程师编程题(一)----[编程题] 生成格雷码
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 试卷: 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题(两题)
- 腾讯2016研发工程师编程题(2道)
- 微信红包(腾讯2016研发工程师编程题)
- 腾讯2016研发工程师编程题之微信红包
- 腾讯2016年研发工程师编程题--完全解析
- 腾讯2016研发工程师编程题(二)----微信红包
- OpenCV中的HOG+SVM物体分类
- ubuntu报错:No such file or directory
- ITK: 连通区域检测和分析
- HttpClient关闭连接
- HDU 2669 Romantic
- 递归生成格雷码----腾讯2016研发工程师编程题
- iOS常用代码块
- sql when case 根据不同 case 查询不同关联表信息
- 【Android自助餐】Handler消息机制完全解析(一)Message中obtain()与recycle()的来龙去脉
- 1.3Java程序运行机制
- socket传输图片文件
- 欢迎使用CSDN-markdown编辑器
- throw,throws和层层抛出异常
- 将eclipse快捷方式添加到左侧快捷栏