格雷编码xi相邻编码只有一位不同,观察格雷编码
1:0,1
2:00,01,11,10
3:000,001,011,010,110,111,101,100
4:0000,0001,0011,0010,0110,0111,0101,0100,1100,1101,1111,1110,1010,1011,1001,1000
可以看出格雷编码的一些规律,以三位的格雷编码为例,它由两部分构成,第一部分由2位格雷编码从左到右的元素在最左边加0,在最左边加0不影响数字的大小,所以第一部分由2位格雷编码从左到右的元素组成,第二部分由2位格雷编码从右向左的远足在最左边加1组成,在最左边加1就是给原来的元素加2^2(2^n-1).所以使用递归得到结果。
class Solution(object):
def grayCode(self, n):
"""
:type n: int
:rtype: List[int]
"""
if n == 0:
return [0]
elif n == 1:
return [0, 1]
else:
return self.grayCode(n - 1) + [x + (1 << n - 1) for x in reversed(self.grayCode(n - 1))]