因为是硬件出生,所以相对比较容易
"""89. Gray CodeMedium267919The 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: 2Output: [0,1,3,2]Explanation:00 - 001 - 111 - 310 - 2For 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 - 010 - 211 - 301 - 1Example 2:Input: 0Output: [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]."""
格雷码就是一种相邻两位只有一个符号差别的编码,可以减少数据误差
格雷码有两个特点,拿三位格雷码举例
0000,0001,0011,0010,0110,0111,0101,0100,
1、前2位和2位格雷码相同
2、后两位看到前半段和后半段是顺序相反的,所以做n位格雷码只要先做n-1位格雷码,再在最后加上后半段就行了
class Solution: def grayCode(self, n): """ :type n: int :rtype: List[int] """ result = [] #0位格雷码 result.append(0) for i in range(1, n+1): #num是前面的数字个数也是后面的数字要加的数 num = 2**(i-1) #从后向前取反方向 result.extend((i+num for i in reversed(result))) return result