[腾讯]生成格雷码

时间限制:3秒 空间限制:32768K 热度指数:24655

本题知识点: 递归

题目描述

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。

给定一个整数n,请返回n位的格雷码,顺序为从0开始。

测试样例:

1
返回:["0","1"]

思路:

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;        }        else{                vector<string> gray1;                gray1=getGray(n-1);                                int graySize=gray1.size();                vector<string> gray2;                                for(int i=0;i<graySize;i++)                    {                        if(i%2==0)                            {                               gray2.push_back(gray1[i]+"0");                               gray2.push_back(gray1[i]+"1");                        }                    else{                          gray2.push_back(gray1[i]+"1");                          gray2.push_back(gray1[i]+"0");                    }                }            return gray2;        }                }};
时间: 2024-11-01 02:31:37

[腾讯]生成格雷码的相关文章

腾讯生成格雷码

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码. 给定一个整数n,请返回n位的格雷码,顺序为从0开始. 测试样例: 1 返回:["0","1"] 代码: import java.util.*; public class GrayCode {    public String[] getGray(int n) {        int m = 1<<n

[编程题]生成格雷码

[编程题] 生成格雷码 腾讯在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码.给定一个整数n,请返回n位的格雷码,顺序为从0开始.测试样例:1返回:["0","1"] class GrayCode { vector<string> res; public: vector<string> getGray(int n) { // write c

生成格雷码 转自leetcode

在一组数的编码中,若两个相邻的代码中只有一个二进制数不同,则称这种编码为格雷码. 下面尝试使用递归的方法来生成格雷码 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.

格雷码的实现

问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同. 例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 . 如果要产生n位元的格雷码,那么格雷码的个数为2^n. 假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右边的位元值:第二步,改变右起第一个为1的位元的左边位元:第三步,第四步重复第一步和第二步,直到所有的格雷码产生完毕(换句话说,已

C程序设计的抽象思维-递归过程-格雷码

[问题] 每一对相邻整数的二进制表示只有一位发生变化,这种编码称为Gray码. 如下所示3位的Gray码: 000 0 001 1 011 2 010 3 110 4 111 5 101 6 100 7 要产生N位的Gray码,所需的递归思想概括如下: 1. 写出N-1位的Gray码. 2. 以相反的顺序在该Gray码下重写一遍. 3. 在第一步得到的Gray码前加0,在第二步得到的Gray码前加1. 继续以3位Gray码为例,推导过程如下所示: [代码] #include <stdio.h>

格雷码那点事——递归非递归实现

简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码.在数字系统中,常要求代码按一定顺序变化.例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100.1111等).在特定情况下可能导致电路状态错误或输入错误.使用格雷码可以避免这种错误.格雷码有多种

产生n位元的所有格雷码

原文链接:http://blog.csdn.net/beiyeqingteng/article/details/7044471 问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同. 例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 . 如果要产生n位元的格雷码,那么格雷码的个数为2^n. 假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右

LeetCode 格雷码序列的生成

问题概述:在一组数的编码中,若随意两个相邻的代码仅仅有一位二进制数不同.则称这样的编码为格雷码. 2位数的格雷码序列:00 : 001 : 111 : 310 : 2找规律:假设要求n位的格雷码,先要求出n-1位的格雷码. 循环上一次格雷码的每一位,都会生成两个新的格雷码: 统计'1'出现的次数假设为偶数: 两个新格雷码分别为xxx1和xxx0假设为奇数: 两个新格雷码分别为xxx0和xxx1 以3位格雷码为例: 由00得:000 = 00+(0)001 = 00+(1) 由01得:011 =

腾讯笔试题----格雷码的实现

昨天腾讯C++研发的一道笔试题,给定一个N,求这N位的格雷码,如果不知道格雷码的请自行问度娘.由于当时答题时间比较紧,所以没有考虑清楚到底该怎么做,只是有一个大体的思路,但是还是没有写上去(感觉自己解决问题的能力还是弱啊.....). 题目已经提示,使用递归求解,既然是递归,我当时想应该利用分治法求解,先设置一位,然后问题的规模就变成N-1,然后再求解,又联想到剑指offer的第12题(打印1到最大的n位数),所以感觉这种思路应该是可以求解的,但是还有一个问题有待解决--怎么满足格雷码的要求(每