每天一道演算法題系列二十二之括號生成
阿新 • • 發佈:2020-12-15
每天一道演算法題系列:
來源:力扣(LeetCode)
本題連結:https://leetcode-cn.com/problems/generate-parentheses/
來源是力扣,大家喜歡可以去力扣中文網做相應的其他的題,某瀏覽器直接搜力扣即可。
本題難度是中等
數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
示例:
輸入:n = 3
輸出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
//遞迴的解法太方便了 但是我好容易被繞進去 不懂的話去力扣看看大佬的題解 寫得比我好
public class GenerateParenthesis {
List<String> list = new ArrayList<>();
public List<String> generateParenthesis(int n) {
dfs(n, n, "");
return list;
}
private void dfs(int left, int right, String s) {
if (left == 0 && right == 0) { // 左右括號都不剩餘了,遞迴終止
list.add(s);
return;
}
if (left > 0) { // 如果左括號還剩餘的話,可以拼接左括號
dfs(left - 1, right, s + "(");
}
if (right > left) { // 如果右括號剩餘多於左括號剩餘的話,可以拼接右括號
dfs(left, right - 1, s + ")");
}
}
public static void main(String[] args) {
GenerateParenthesis gg = new GenerateParenthesis();
gg.generateParenthesis(3);
}
}
上一篇文章:每天一道演算法題系列二十一之刪除排序陣列中的重複項
如果本篇內容有問題,請第一時間聯絡我,我會第一時間修改。
謝謝大家。