89 Gray Code

因为是硬件出生,所以相对比较容易

"""
89. Gray Code
Medium
267
919


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].
"""

格雷码就是一种相邻两位只有一个符号差别的编码,可以减少数据误差

格雷码有两个特点,拿三位格雷码举例

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

 

看不懂自己当年写的是啥...

posted @ 2018-12-05 11:18  茫茫碧落  阅读(196)  评论(0编辑  收藏  举报