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)
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 68 Text Justification(Python详解及实现)
- LeetCode 56 Merge Intervals(Python实现及详解)
- LeetCode 76 Minimum Window Substring(Python详解及实现)
- LeetCode 74 Search a 2D Matrix(Python详解及实现)
- LeetCode 80 Remove Duplicates from Sorted Array II (Python详解及实现)
- LeetCode 70 Climbing Stairs(Python详解及实现)
- LeetCode 64 Minimum Path Sum(Python详解及代码实现)
- LeetCode 85 Maximal Rectangle (Python详解及实现)
- LeetCode 91 Decode Ways (Python详解及实现)
- LeetCode 78 Subsets (Python详解及实现)
- LeetCode 92 Reverse Linked List II (Python详解及实现)
- [leetcode 89] Gray Code---实现格雷码
- LeetCode 86 Partition List (Python详解及实现)
- LeetCode 81 Search in Rotated Sorted Array II (Python详解及实现)
- LeetCode 73 Set Matrix Zeroes(Python详解及实现)
- LeetCode 87 Scramble String (Python详解及实现)
- LeetCode 65 ValidNumer(Python详解及实现)
- 25_LeetCode 82&83. Remove Duplicates from Sorted List(II) (Python详解及实现)
- LeetCode 66 Plus One (Python详解及实现)
- LeetCode 75 SortColor(Python详解及实现)