The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
Example 1:
Input: 2
Output: [0,1,3,2]
Explanation:
00 - 0
01 - 1
11 - 3
10 - 2
For a given n, a gray code sequence may not be uniquely defined.
For example, [0,2,3,1] is also a valid gray code sequence.
00 - 0
10 - 2
11 - 3
01 - 1
Example 2:
Input: 0 Output:[0] Explanation: We define the gray code sequence to begin with 0. A gray code sequence of n has size = 2n, which for n = 0 the size is 20 = 1. Therefore, for n = 0 the gray code sequence is [0].
题目要求写出相邻二进制码之间只有一位不同的二进制码序列,二进制码的长度为n。并且二进制码序列以0开头。
分析:一位二进制码是0 1
二位二进制码是00 01 10 11
三位二进制码是000 001 010 011 111 110 101 100
可以看出n+1位二进制码就是的后n位镜像对称,然后后边的2^n/2位在首位加上1即可。如下图所示:
因此使用递归法产生多位二进制码。首位的1相当于当前二进制码+1的二进制码无符号左移n-1位。
代码展示:
class Solution { public: vector<int> grayCode(int n) { vector<int> res; if(n==0){ res.push_back(0); return res; } vector<int> temp = grayCode(n-1); for(int i=0;i<temp.size();++i)res.push_back(temp[i]); for(int i=temp.size()-1;i>=0;--i)res.push_back(temp[i]+(1<<n-1)); return res; } };