二進位制的練習掌握
格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。
要求:給乙個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,...