遞迴 | 第k個語法符號(Python)
在第一行我們寫上一個 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)].
連結:https://leetcode-cn.com/problems/k-th-symbol-in-grammar
暴力法
class Solution(object):
def kthGrammar(self, N, K):
rows = []
lastrow = '0'
while len(rows) < N:
rows.append(lastrow)
lastrow = "".join('01' if x == '0' else '10'
for x in lastrow)
return int(rows[-1][K-1])
遞迴法(父子遞迴)
class Solution(object):
def kthGrammar(self, N, K):
if N == 1: return 0
return (1 - K%2) ^ self.kthGrammar(N-1, (K+1)//2)
#第 K 個數字是上一行第 (K+1) // 2 個數字生成的, (1-K%2)是因為如果上一行的數字為 0,被生成的數字為 1 - (K%2),如果上一行的數字為 1,被生成的數字為 K%2.
#位異或用的很巧妙,因為0,1生成的'0','1'順序剛好相反,因此只要一個判斷條件,相對應的,位異或看K%2,得到的數字剛好就是奇數位'1',偶數位'0', 如果上一行的相應數字是1,則得到奇數位'0',偶數位'1',即對應'01',矛盾, 故選擇 1-K%2.
轉換為二進位制運算
class Solution(object):
def kthGrammar(self, N, K):
return bin(K - 1).count('1') % 2 #翻轉的次數等於 K-1 二進位制表示形式中 1 出現的個數
參考:https://leetcode-cn.com/problems/k-th-symbol-in-grammar/solution/di-kge-yu-fa-fu-hao-by-leetcode/
相關文章
- markdown特殊符號語法符號
- 【遞迴打卡2】求兩個有序陣列的第K小數遞迴陣列
- Markdown 常用數學符號和語法符號
- Java語言非遞迴求第n個斐波那契數Java遞迴
- JAVA基礎語法——識別符號、修飾符、關鍵字(個人整理總結)Java符號
- python 遞迴和二分法Python遞迴
- 遞迴:698、劃分為k個相等的子集遞迴
- python 中 *符號Python符號
- 遞迴與回溯法遞迴
- leetcode:遞迴:括號生成LeetCode遞迴
- c語言_遞迴C語言遞迴
- 遞迴-第X大的數遞迴
- Python語法—函式及引數傳遞Python函式
- 分治與遞迴-找k個臨近中位數的數遞迴
- python的識別符號Python符號
- 三、遞迴樹分析法遞迴
- 1.5.6 python遞迴函式Python遞迴函式
- 13.0、python遞迴函式Python遞迴函式
- Python實現連結串列反轉的方法【迭代法與遞迴法】Python遞迴
- java基本無法-識別符號Java符號
- python-動態規劃的遞迴、非遞迴實現Python動態規劃遞迴
- python 負數去掉符號位Python符號
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- C#實現FFT(遞迴法)C#FFT遞迴
- C語言-識別符號命名C語言符號
- Go 語言指標符號 *和&Go指標符號
- 這個遞迴不太難遞迴
- GO語言————6.6 遞迴函式Go遞迴函式
- C#語言函式遞迴C#函式遞迴
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- 遞迴和尾遞迴遞迴
- Mybatis xml特殊符號轉義寫法MyBatisXML符號
- 無法解析外部符號:AdjustTokenPrivileges和GetAstncKetState符號AST
- python基礎語法迴圈巢狀和列表(一)Python巢狀
- python基礎語法迴圈巢狀和列表(二)Python巢狀
- LeetCode - 22. 括號的生成(遞迴)1LeetCode遞迴
- python函式符號sympy的用法Python函式符號
- 1413: C語言合法識別符號C語言符號