leetcode22 括号生成

Posted patrolli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode22 括号生成相关的知识,希望对你有一定的参考价值。

题目https://leetcode-cn.com/problems/generate-parentheses/

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

样例输入与输出

n = 3
输出:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"]

思路

  • 不难想出直接暴力的做法,每个位置上有"("和")"两种选择,总共有2^n种情况。但可以进行优化,因为第一个括号一定是"(",并且只有在有"("时才能放置")",因此记录左括号的个数,每放一个右括号,左括号的数目减1,当左括号数目为0时,下一位置不能放置右括号。

代码

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> ans;
        string str; str.resize(2*n);
        dfs(0, n, str, ans, 0);
        return ans;
    }
private:
    void dfs(int idx, int n, string& str, vector<string>& ans, int l){
        if(idx == 2*n){
            if(l == 0){
                ans.push_back(str);
            }
            return;
        }
        str[idx] = '('; dfs(idx+1, n, str, ans, l+1);
        if(l)
            {str[idx] = ')'; dfs(idx+1, n, str, ans, l-1); }
    }
};

以上是关于leetcode22 括号生成的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 22. 括号生成c++/java详细题解

leetcode-22 括号生成

leetcode 22 生成括号

leetcode-22括号生成

LeetCode22:括号生成

LeetCode- 22. 括号生成