遞迴 | 第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小數遞迴陣列
- 2.3Python基礎語法(1):識別符號Python符號
- Java語言非遞迴求第n個斐波那契數Java遞迴
- Markdown 常用數學符號和語法符號
- 英語中各種符號的讀法符號
- 單位符號的英語說法 -引用符號
- python 遞迴和二分法Python遞迴
- c語言_遞迴C語言遞迴
- URL編碼(傳遞特殊符號)符號
- javascript基礎語法——變數和識別符號JavaScript變數符號
- python 中 *符號Python符號
- 計算機語言符號集語法規範:BNF與ABNF計算機符號
- 1223 遞迴下降語法分析程式設計遞迴語法分析程式設計
- leetcode:遞迴:括號生成LeetCode遞迴
- 三、遞迴樹分析法遞迴
- Python使用遞迴法和函數語言程式設計計算整數各位之和Python遞迴函數程式設計
- 無法解析的外部符號符號
- C語言之有符號無符號整數取值範圍C語言符號
- Python語法—函式及引數傳遞Python函式
- JAVA基礎語法——識別符號、修飾符、關鍵字(個人整理總結)Java符號
- C語言中的*和&符號C語言符號
- 英語標點符號大全符號
- C#實現FFT(遞迴法)C#FFT遞迴
- 一個遞迴查詢遞迴
- 1.5.6 python遞迴函式Python遞迴函式
- 13.0、python遞迴函式Python遞迴函式
- python-動態規劃的遞迴、非遞迴實現Python動態規劃遞迴
- 遞迴和尾遞迴遞迴
- java基本無法-識別符號Java符號
- shell報錯:未預期的符號***附近有語法錯誤符號
- error C2061: 語法錯誤: 識別符號“MonsterSprite”Error符號
- python的識別符號Python符號
- sympy —— Python 符號運算Python符號
- Python實現連結串列反轉的方法【迭代法與遞迴法】Python遞迴
- C#語言函式遞迴C#函式遞迴
- GO語言————6.6 遞迴函式Go遞迴函式
- 二分法的簡單實現——-遞迴和非遞迴遞迴