题目描述
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。
给定一个整数n,请返回n位的格雷码,顺序为从0开始。
测试样例:
1
返回:[“0”,“1”]
分析
1、n=1时,返回0,1
2、n=2时,返回00,01,10,11
3、n=3时,返回000,001,010,011,100,101,110,111
通过观察n=1,2,3时返回的格雷码可以发现这样的规律:
1、n=2的格雷码是在n=1的格雷码按顺序在前面加0,加1
2、n时的格雷码的长度是n-1时的格雷码的长度的两倍
算法实现:
#include <iostream>
#include<vector>
using namespace std;
vector<string> getGray(int n) {
// write code here
vector<string> result;
if(n == 1){
result.push_back("0");
result.push_back("1");
return result;
}else{
result = getGray(n-1);
int currentsize = (int)result.size();
for(int i