碰到這個問題 是在22題 括號生成
需要對括號做有序生成,其中應用了遞迴函式十分簡潔,我還不能充分掌握這種表達方式。特此學習記錄。
class
solution
:def
generateparenthesis
(self, n:
int)
-> list[
str]
: ans =
defbacktrack
(s, left, right):if
len(s)==2
* n:
''.join(s)
)return
if left < n:
'(')
backtrack(s, left+
1, right)
s.pop(
)if right < left:
')')
backtrack(s, left, right+1)
s.pop(
) backtrack(
,0,0
)return ans
程式描述 第一次流程,給棧中壓進n個"(「然後壓入n個」)"
函式在內部呼叫自身,就是遞迴函式。
可以看到 遞迴函式有迴圈的特質
理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。
使用遞迴函式需要注意防止棧溢位。在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位。可以試試fact(1000)
尾遞迴是指,在函式返回的時候,呼叫自身本身,並且,return語句不能包含表示式。這樣,編譯器或者直譯器就可以把尾遞迴做優化,使遞迴本身無論呼叫多少次,都只占用乙個棧幀,不會出現棧溢位的情況。
刷題知識點
加速輸入輸出流,放到 頭部 static const auto speedup 陣列初始化容器 int a vector b begin a end a map操作 include include using namespace std int main void else 刪除 iterator ...
刷題小知識點
二維陣列的指標寫法 include using namespace std int main for int i 0 i 3 i cout a 1 2 endl system pause return 0 char a 10 則最後乙個必須是 0 前面9個數 char a 多維陣列最後一維必須有值。...
python leetcode刷題知識點筆記2
第一種方法 bfs廣度優先搜尋,使用雙端佇列deque 因為效能比另外兩種queue好得多 在大迴圈內對二叉樹的每個層做一次遍歷,range len queue 使只遍歷當前的層,每次大迴圈ans加1。由於每個節點僅訪問一次,所以時間複雜度o n import collections class s...