【leetcode】22. Generate Parentheses

来源:互联网 发布:java embedded 编辑:程序博客网 时间:2024/04/26 20:03

一、题目描述

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,写一个函数生成所有合法的n对括号的组合


思路:全排列问题,使用递归比较容易写出代码。首先注意使得组合合法的限制条件(1)有n对括号(n个左括号和n个右括号)(2)任一个位置上左括号数一定要大于等于右括号数。如果用left来计数左括号的个数,right来计数右括号的个数,容易得出递归结束的条件是left==n && right ==n


c++代码(4ms,12.82%)

class Solution {private:    vector<string> result;    int n;    public:    void generate(int left, int right, string str, int rest){        //left:左括号数,right:右括号数,str:当前的字符串,rest:左括号数-右括号数(即要保证左括号数大于等于右括号数)        if(left == n && right == n){  //递归结束条件            result.push_back(str);            return;        }        if(left != n){            generate(left+1, right, str+'(', rest+1);        }        if(right!=n && rest>=1){            generate(left, right+1, str+')', rest-1);        }        return;    }    vector<string> generateParenthesis(int n) {        this->n=n;        generate(1,0, "(", 1);        return result;    }};




0 0