Python實現資料結構與演算法 第K個語法符號

2021-10-04 18:46:25 字數 1162 閱讀 5334

在第一行我們寫上乙個 0。接下來的每一行,將前一行中的0替換為01,1替換為10。

給定行數 n 和序數 k,返回第 n 行中第 k個字元。(k從1開始)

例子:

輸入: n =

1, k =

1輸出:

0輸入: n =

2, k =

1輸出:

0輸入: n =

2, k =

2輸出:

1輸入: n =

4, k =

5輸出:

1解釋:

第一行:

0第二行:

01第三行:

0110

第四行:

01101001

注意:

n 的範圍 [1, 30].

k 的範圍 [1, 2^(n-1)].

很顯然,第n行的值與第n-1行有關,這道題採用遞迴求解。

根據題意,0變01,1變10

第n行的第k個數和第n-1的第(k+1)//2有關。

這個關係就是:如果k是奇數,則值與前一行的相同,否則為1-前一行的值。

**如下:

class

solution

:def

kthgrammar

(self, n:

int, k:

int)

->

int:

if n ==0:

return

0 res = self.kthgrammar(n-1,

(k+1)//

2)return res if k%2&

1else

1-res

res = self.kthgrammar(n-1,

round

(k/2

))

這樣做會出錯,因為round(k/2)在距離兩邊正數相等時,會取偶數端。具體可以看官方文件round函式。舉例說明:

>>

>

round

(4.5)4

>>

>

round

(3.5

)4

所以為例避免這種問題,採用了(k+1)//2的取整操作

python資料結構與演算法

coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...

資料結構與演算法 python

元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...

python演算法與資料結構

若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...