Leetcode89 格雷編碼

2021-10-09 22:30:00 字數 1994 閱讀 3047

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