[leetcode] 22. Generate Parentheses

Question:

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:

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

Solution:

遞歸求解,參數cur表示當前的字符串,left表示還可以加左括號的個數,right表示必須加右括號的個數。那麼對於當前的cur,就可以要麼給它加一個左括號,要麼加一個右括號,然後繼續往下遞歸。

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> ret;
        helper("", n, 0, ret);
        return ret;
    }

    void helper(string cur, int left, int right, vector<string> & ret) {
        if (!left) {
            for (int i = 0; i < right; i++)
                cur += ")";
            ret.push_back(cur);
            return;
        }
        helper(cur+"(", left-1, right+1, ret);
        if (right)
            helper(cur+")", left, right-1, ret);
    }
};
發佈了79 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章