生成格雷码(腾讯2016研发工程师编程题)

来源:互联网 发布:usb虚拟打印机端口 编辑:程序博客网 时间:2024/06/03 02:27

生成格雷码(腾讯2016研发工程师编程题)


1、题目:
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。
给定一个整数n,请返回n位的格雷码,顺序为从0开始。
测试样例:
1
返回:[“0”,”1”]


2、思路:
格雷码:异或生成、反射码递归生成(get新技能)。
欲得n+1位码,先0+n位码,后1+n位逆序码(存放顺序)。


3、代码:

#include <iostream>#include <vector>#include <string>using namespace std;vector<string> getGray(int n) {    // write code here    if (n != 1)    {        vector<string> vs = getGray(n - 1);        for (int i=vs.size()-1;i>=0;--i)        {            vs.push_back("1" + vs[i]);            vs[i] = "0" + vs[i];        }        return vs;    }    else    {        return vector<string>{"0", "1"};    }}int main(){    int n;    cin >> n;    for (const string &str : getGray(n))    {        cout << str << endl;    }    system("pause");    return 0;}

4、结果:
这里写图片描述

0 0
原创粉丝点击