1. 程式人生 > >Leetcode(22)括號生成

Leetcode(22)括號生成

題目描述
給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。
例如,給出 n = 3,生成結果為:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

解題思路
回溯法
只有在我們知道序列仍然保持有效時才新增 ‘(’ or ‘)’,而不是像方法一那樣每次新增。我們可以通過跟蹤到目前為止放置的左括號和右括號的數目來做到這一點。

class Solution {
public:
    vector<string> generateParenthesis(int n) 
    {
        vector<string> res ;
        generateParenthesisDFS(n, n, "", res);
        return res;
    }
     void generateParenthesisDFS(int left, int right, string out, vector<string> &res) {
         if (left > right) return;
         if (left == 0 && right == 0) res.push_back(out);
         else {
             if (left > 0) generateParenthesisDFS(left - 1, right, out + '(', res);
             if (right > 0) generateParenthesisDFS(left, right - 1, out + ')', res);
         }
     }   
};