LeetCode - 22. 括號的生成(遞迴)1
題目:
數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
示例:
輸入:n = 3
輸出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
方法一: 遞迴
先考慮自頂向下的邏輯思考,進行程式碼的編寫。
思路:
不考慮括號產生的合法性,括號放置位置可為2 * n 個,即可放左括號,也可放右括號;
之後再祛除不合法的括號(思考判斷條件是左括號只要不超過n,則隨時可以加;右括號在左個數 > 右個數 就新增)
class Solution {
private List<String> result;
public List<String> generateParenthesis(int n) {
result = new ArrayList<String>();
_generate(0, 0, n,"");
return result;
}
//如果s不合法就退出
// left 隨時加,只要不超標
// right 左個數>右個數 就新增
private void _generate(int left, int right, int n, String s) {
//terminator
if (left == n && right == n){
result.add(s);
return;
}
//process current logic :left ,right
//drill down
//左括號增加的條件
if (left < n)
_generate(left + 1,right,n,s+"(");
//右括號增加的條件
if (left > right)
_generate(left,right + 1 ,n,s+")");
//reverse status
}
}
相關文章
- leetcode:遞迴:括號生成LeetCode遞迴
- 22. 括號生成-c++C++
- 力扣 22. 括號生成力扣
- 【leetcode】22. Generate Parentheses 合法括號串的所有組合LeetCode
- 括號生成-LeetCode22LeetCode
- [LeetCode] Generate Parentheses 生成括號LeetCode
- LeetCode-022-括號生成LeetCode
- [leetcode]有效的括號LeetCode
- Leetcode20. 有效的括號LeetCode
- Leetcode——20. 有效的括號LeetCode
- 【LeetCode-棧】有效的括號LeetCode
- LeetCode有效的括號(Python)LeetCodePython
- LeetCode 20. 有效的括號LeetCode
- 【LeetCode】 20.有效的括號LeetCode
- 【leetcode】leetcode22括號生成通過程式碼及題解LeetCode
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- LeetCode 3: PairsOfParentheses (括號匹配問題)LeetCodeAI
- [LeetCode] Valid Parentheses 驗證括號LeetCode
- LeetCode-20. 有效的括號(棧模擬)LeetCode
- 函式遞迴與生成式函式遞迴
- Leetcode 20 有效的括號valid-parentheses(棧)LeetCode
- 萌新練習寫程式碼的每日一練:括號生成
- 力扣刷題Python筆記:括號生成力扣Python筆記
- [LeetCode] Longest Valid Parentheses 最長有效括號LeetCode
- c++物件建立帶括號與無括號的區別C++物件
- JavaScript中圓括號()和方括號[]的一個特殊用法JavaScript
- Matlab中的括號()[]{}Matlab
- 20. 有效的括號
- 括號畫家
- 【棧】括號匹配
- day 17 – 1 遞迴函式遞迴函式
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- JSON 字串中的中括號和大括號區別詳解JSON字串
- JavaScript 函式呼叫時帶括號和不帶括號的區別JavaScript函式
- LeetCode 之 JavaScript 解答第20題 —— 有效的括號(Valid Parentheses)LeetCodeJavaScript
- 演算法練習題1-括號序列演算法
- 遞迴和尾遞迴遞迴
- Oracle按固定次數遞迴生成日期Oracle遞迴