攻防世界-高手進階區通關筆記
阿新 • • 發佈:2020-11-04
括號生成
題目:
數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
示例:
輸入:n = 3
輸出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
解題思路:用回溯解決,不好想到的是方法中傳入左括號和右括號剩下的數量
class Solution { private List<String> ans = new ArrayList(); public List<String> generateParenthesis(int n) { dfs(n, new StringBuffer(), n, n); return ans; } private void dfs(int n, StringBuffer sb, int left, int right) { //剩下的右括號數量小於左括號數量那麼一定不合法 if(left > right) return ; if(left < 0 || right < 0) return ; if(left == 0 && right == 0) { ans.add(sb.toString()); return ; } //先嚐試左括號 sb.append("("); dfs(n, sb, left - 1, right); sb.deleteCharAt(sb.length() - 1); //嘗試右括號 sb.append(")"); dfs(n, sb, left, right - 1); sb.deleteCharAt(sb.length() - 1); } }