1. 程式人生 > >[LeetCode]22. Generate Parentheses括號生成

[LeetCode]22. Generate Parentheses括號生成

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]


根據題目要求計算出所有可能性,我們使用回溯來處理,首先確定幾個問題
1.必須先有左括號才能有右括號,不然序列不合法
2.左括號的個數必須小於給出的個數n
基於上面的條件,我們設計回溯的時候需要先放左括號,在有左括號的基礎上才能有右括號,所以我們設定2個left和right來計算左右括號的個數
left<n時可以放置左括號,然後遞迴進去處理,當left=n時放右括號,right<left,這個條件很重要,如果沒有的話可能導致在第1個位置left=0時放置右括號,這是不合法序列
最後list.length==2*n時返回
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList();
        backtrack(ans, "", 0, 0, n);
        return ans;
    }

    public void backtrack(List<String> ans, String cur, int open, int close, int max){
        if
(cur.length() == max * 2) { ans.add(cur); return; } if (open < max) backtrack(ans, cur+"(", open+1, close, max); if (close < open) backtrack(ans, cur+")", open, close+1, max); } }