您的位置:首页 > 编程语言 > Python开发

LeetCode 89 Gray Code (Python详解及实现)

2017-08-09 19:23 651 查看
【题目】

The gray code is a binary numeral systemwhere two successive values differ in only one bit.

 

Given a non-negative integer n representingthe total number of bits in the code, print the sequence of gray code. A graycode sequence must begin with 0.

 

For example, given n = 2, return [0,1,3,2].Its gray code sequence is:

 

00 - 0

01 - 1

11 - 3

10 - 2

Note:

For a given n, a gray code sequence is notuniquely defined.

 

For example, [0,2,3,1] is also a valid graycode sequence according to the above definition.

 

For now, the judge is able to judge basedon one instance of gray code sequence. Sorry about that.

 

给出n值时,给出n位的格雷码所对应的数字的向量,

【思路】

这道题采用回溯法,因为n位的与n-1位的格雷码是有关系的,前半部分与n-1位的相同。后半部分的由对称的前面那部分加上2^(n-1)。

n = 1--->[0,1]

n = 2--->[0,1,1+2^1,0+2^1] =[0,1,3,2]

n = 3---> [0,1,3,2,2+2^2,3+2^2,1+2^2,0+2^2]= [0,1,3,2,6,7,5,4]

 

【Python实现】

 class Solution(object):
def grayCode(self, n):
"""
:type n: int
:rtype: List[int]
"""
if n < 1:
return [0]
if n == 1:
return [0, 1]

# recursive case
res = self.grayCode(n-1)

digit = pow(2, n-1)
for i in range(digit-1, -1, -1):
res.append(res[i] + digit)
print(res)
return res

if __name__ == '__main__':
S= Solution()
S.grayCode(3)

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode Python