1. 程式人生 > 其它 >每天一道演算法題系列二十二之括號生成

每天一道演算法題系列二十二之括號生成

技術標籤:dfsleetcodejavadfs

每天一道演算法題系列:
來源:力扣(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); } }

上一篇文章:每天一道演算法題系列二十一之刪除排序陣列中的重複項
如果本篇內容有問題,請第一時間聯絡我,我會第一時間修改。
謝謝大家。