leetcode 22. 括号生成(Generate Parentheses)

题目描述:

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

示例:

给出 n = 3,生成结果为:
[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

解法:


class Solution {
public:
    vector<string> generate(int left, int right){
        // cout<<left<<", "<<right<<endl;
        vector<string> res;
        if(left == 0 && right == 0){
            return {""};
        }
        
        if(left < right){
            if(left >= 1){
                vector<string> tmp = generate(left-1, right);
                for(string s : tmp){
                    res.push_back('(' + s);
                }
            }
            vector<string> tmp = generate(left, right-1);
            for(string s : tmp){
                res.push_back(')' + s);
            }
        }else{
            vector<string> tmp = generate(left-1, right);
            for(string s : tmp){
                res.push_back('(' + s);
            }
        }
        return res;
    }
    
    vector<string> generateParenthesis(int n) {
        return generate(n, n);
    }
};

猜你喜欢

转载自www.cnblogs.com/zhanzq/p/10694311.html