腾讯2016研发工程师编程题(一)----[编程题] 生成格雷码
来源:互联网 发布:冷艳锯 知乎 编辑:程序博客网 时间:2024/06/02 00:58
腾讯2016研发工程师编程题(一)—-[编程题] 生成格雷码
时间限制:3秒空间限制:32768K
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。
给定一个整数n,请返回n位的格雷码,顺序为从0开始。
测试样例:
1
返回:[“0”,”1”]
要实现该题,首先要弄清楚什么是格雷码。可以查看百度百科里面对格雷码的解释。题目中要求用递归方法来生成格雷码,可以查看百度百科中,对通过递归法来生成格雷码的解释如下:
这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造,可以对应下表来进行查看:
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1
有了上面的描述,然后实现起来就非常的容易,我的实现如下:
#include <iostream>#include <vector>#include <string>using namespace std;class GrayCode {public: vector<string> getGray(int n) { vector<string> v,temp; // write code here if( n == 1 ) { v.push_back("0"); v.push_back("1"); return v; } temp = getGray(n-1); for (vector<string>::iterator iter = temp.begin(); iter != temp.end(); iter++) { //cout << "0000 " << *iter << endl; v.push_back("0"+(*iter)); } for (vector<string>::reverse_iterator riter = temp.rbegin(); riter != temp.rend(); riter++) { //cout << "1111 " << *riter << endl; v.push_back("1"+(*riter)); } return v; }};int main(){ int num; vector<string> v; GrayCode grayCode; cin >> num; v = grayCode.getGray(num); for( size_t i=0;i<v.size();++i) { if( !(i%2) ) { cout << "[ \"" << v[i] << "\" ,"; } else { cout << "\"" << v[i] << "\" ]" << endl; } } return 0;}
大家可以留言讨论。
阅读全文
0 0
- 腾讯2016研发工程师编程题(一)----[编程题] 生成格雷码
- 生成格雷码(腾讯2016研发工程师编程题)
- 递归生成格雷码----腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题生成格雷码
- 腾讯2016研发工程师编程题之生成格雷码
- 腾讯2016研发工程师编程题——生成格雷码
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 试卷: 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题
- 腾讯2016研发工程师编程题(两题)
- 腾讯2016研发工程师编程题(2道)
- 微信红包(腾讯2016研发工程师编程题)
- 腾讯2016研发工程师编程题之微信红包
- 腾讯2016年研发工程师编程题--完全解析
- 腾讯2016研发工程师编程题(二)----微信红包
- 用栈和队列实现魔王语言
- java 向上转型和向下转型
- 【Java-集合】HashMap-Hash冲突解决
- C++ static
- 股票量化分析(12)——第三个策略(kdj策略)
- 腾讯2016研发工程师编程题(一)----[编程题] 生成格雷码
- Redis 数据库架构
- FastDFS详细安装步骤,测试;Nginx中配置FastDFS,并提供优化,下载方法,楼主已测
- 文章标题 AngularJs表单验证
- Bellman-Ford算法的实现
- 软件推荐
- Spark SQL Catalyst深入理解
- LeetCode-114. Flatten Binary Tree to Linked List
- display:table的用法