[leetcode] 22. Generate Parentheses

来源:互联网 发布:亚麻籽油 知乎 编辑:程序博客网 时间:2024/05/22 14:53

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);    }};
原创粉丝点击