在第一行我們寫上乙個 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 實現...