演算法 格雷編碼

2021-10-23 14:49:40 字數 1141 閱讀 8631

二進位制的練習掌握

格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。

要求:給乙個n,構建對應的格雷編碼

舉例:

輸入:

2輸出:[0

,1,3

,2]解釋:00-

001-1

11-310

-2

思路:

觀察案例得知,格雷編碼是連續的二進位制數。

規則有兩條:

1,n=2,就是兩位二進位制,對應的那n=3就是三位二進位制…以此類推。

2,僅有一位差異, 00,下乙個可以是01或者10,我們選擇01,那下一位就是11,再下一位就是10

解題:所以,思路來了,萬能的動態規劃,萬物皆可動~~。

假設 dp[n-1] = [0,1] , 逆序就是[1,0] ,每個元素+2**n,就是[11,10]

dp[n] = dp[n-1] + (dp[n-1]的逆序,並對每個元素+2**n)

優化:此處動態規劃,發現只需要n項,和n-1項,之前的n-2…所有都不是必須的。

所以,我們用兩個變數來代替dp

用來 circle 代替 n.(第一輪n=0,第二輪n=1,以此類推)

編碼實現:

class

solution

:def

graycode

(self, n:

int)

-> list[

int]

: pre =[0

]# 相當於dp[n-1]

circle =

0# 目前到第幾輪,也就是dp[n]中的n

now =[0

]# 相當於dp[n]

while circletemp =

size =

len(pre)

for index in

range

(size-1,

-1,-

1):+

2**circle)

circle+=

1 now = pre+temp

pre = now

return now

swift演算法 格雷編碼

1 描述 格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數n,列印其格雷編碼序列,格雷編碼序列必須以0開頭。例1 輸入 2 輸出 0,1,3,2 解釋 對於給定的n,其格雷編碼序列並不唯一,0,2,3,1 也是乙個有效的格雷編碼序列 00...

89 格雷編碼

格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。示例 1 輸入 2 輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯一。例如,...

leetcode 格雷編碼

題目 格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。輸入 2 輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯一。例如,0,...