格雷編碼是一個(gè)二進(jìn)制數(shù)字系統(tǒng),在該系統(tǒng)中,兩個(gè)連續(xù)的數(shù)值僅有一個(gè)位數(shù)的差異。
給定一個(gè)代表編碼總位數(shù)的非負(fù)整數(shù) n,打印其格雷編碼序列。格雷編碼序列必須以 0 開(kāi)頭。
示例 1:
輸入: 2
輸出: [0,1,3,2]
解釋:
00 - 0
01 - 1
11 - 3
10 - 2
對(duì)于給定的 n,其格雷編碼序列并不唯一。
例如,[0,2,3,1] 也是一個(gè)有效的格雷編碼序列。
00 - 0
10 - 2
11 - 3
01 - 1
- show the code:
class Solution:
def grayCode(self, n: int) -> List[int]:
r = [0]
for i in range(n):
r.extend([x|1<<i for x in r[::-1]])
return r
-
此題考察二進(jìn)制以及python中的位運(yùn)算,有關(guān)python位運(yùn)算如下圖:
位運(yùn)算 - 主要邏輯為
x|1<<i代表在原來(lái)的x前面添加一個(gè)1得到十進(jìn)制結(jié)果。 - 其實(shí)此題的規(guī)律即為:這一步結(jié)果 = 上一步結(jié)果 + 上一步結(jié)果的鏡像并在每個(gè)二進(jìn)制數(shù)字前面加一位1
