leetcode : Generate Parentheses
runtime 0 ms, beats 100% of cpp submissions
O((4^n)/sqrt(n)) solution with explanation
tags: recursion
🔗 link
📖 description
給定一個數字 n ,生成一組由 n 個括號組成的合法字串
ex. n = 3 output: ["((()))","(()())","(())()","()(())","()()()"]
🧠 solution
本題的重點在於生成一個 合法的 字串,且生成的過程必須導向一個合法的結果。
其實只要在每個狀態時都滿足左括號比右括號多 (或等於),字串組合到最後一定是合法的。
考慮長度是 5 的狀態,以下幾個是合法的 ex. (())(, ()()(, ((())
因為如果右括號比較多,表示一定有個配對被提早結束了
考慮長度是 5 的狀態,以下幾個是不合法的 ex. )())(, ())(), (()))
⏳ time complexity
總共的遞迴次數為正確答案共有幾個 (計算有點難懂 pass)
總時間複雜度 O((4^n)/sqrt(n))
📝 code
1 | class Solution { |