Leetcode22: Generate Parentheses

来源:互联网 发布:泯然众人 知乎 编辑:程序博客网 时间:2024/05/29 08:29

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:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]
题意:

给出N对括号,求正确的括号排列的组合。如示例,每个左括号一定在右边有一个右括号与之唯一对应。

思路:

递归的思想。将剩余的左括号数和右括号数记为 l r, 要是l == r ==0 ,说明已经得到了符合要求的string,则压入vector;要是左括号数量不等于0,那么在string中加入一个左括号,再调用该函数递归;要是右括号数量不等于0,并且不大于左括号数量,则在string中加入一个右括号并且递归;如果右括号数目小于左括号数目,则该种情况下是无法形成满足题目的string的。

代码:

class Solution {public:    void solve(vector<string> &v, string s, int l, int r){        if(r<l) return ;        if(l==0 && r==0) v.push_back(s);        if(l>0) solve(v, s+"(", l-1, r);        if(r>0) solve(v, s+")", l, r-1);     }    vector<string> generateParenthesis(int n) {        vector<string> res;        solve(res, "", n, n);        return res;    }




0 0