difficulty:中等
格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。
給定乙個代表編碼總位數的非負整數 n,列印其格雷編碼序列。即使有多個不同答案,你也只需要返回其中一種。
格雷編碼序列必須以 0 開頭。
示例 1:
輸入:
2輸出:[0
,1,3
,2]解釋:00-
001-1
11-310
-2對於給定的 n,其格雷編碼序列並不唯一。
例如,[0,
2,3,
1] 也是乙個有效的格雷編碼序列。00-
010-2
11-301
-1
示例 2:
輸入:
0輸出:[0
]解釋: 我們定義格雷編碼序列必須以 0 開頭。
給定編碼總位數為 n 的格雷編碼序列,其長度為 2n。當 n =
0 時,長度為 20=1。
因此,當 n =
0 時,其格雷編碼序列為 [
0]。
solution
典型格雷碼的生成:
計算法
計算法**⬇
class
solution
(object):
defgraycode
(self, n)
:"""
:type n: int
:rtype: list[int]
"""if n==0:
return[0
]
bin=
[bin
(x)[2:
]for x in
range(2
**n)
] bin=
['0'
*(n-
len(x)
)+x for x in bin]
l=for x in bin:
trs=x[0]
for i in
range
(n-1):
trs+=
('0'
if x[i]
==x[i+1]
else
'1')
return
[int
(x,2
)for x in l]
反射法
反射法**⬇
class
solution
(object):
defgraycode
(self, n)
:"""
:type n: int
:rtype: list[int]
"""if n==0:
return[0
] l=
['0'
,'1'
]for i in
range
(n-1):
nl=['0'
+x for x in l]
nl+=
['1'
+x for x in l[::
-1]]
l=nl
return
[int
(x,2
)for x in l]
反射法要快一些。
附:python十進位制轉二/八/十六進製制函式;
其他進製轉十進位制,用int(str, 原進製)
即可。
Leetcode 89 格雷編碼
格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。示例 1 輸入 2輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯一。例如,0,...
LeetCode89 格雷編碼
格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。示例 1 輸入 2 輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯一。例如,...
leetcode 89 格雷編碼
格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。示例1 輸入 2 輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯一。例如,0...