LeetCode 22. 括号生成 DFS

地址 https://leetcode-cn.com/problems/generate-parentheses/

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:
输入:n = 1
输出:["()"]
 

提示:
1 <= n <= 8

解答

dfs 在可能的情况下 尝试填写( 与 )两种符号
填写(的情况比较宽松 只要当前该符号使用次数不为0即可
填写)的情况还需要额外观察填写的(个数 如果(个数比)个数少 则不能填写)

class Solution {
public:
    vector<string> ans;
    stack<char> s;
    int limit = 0;
    int left = 0;
    int right = 0;
    void dfs(string& s, int idx) {
        if (idx == limit) {
            ans.push_back(s);
            return;
        }

        if(left > 0){
            s += '('; left--;
            dfs(s, idx + 1);
            s.pop_back(); left++;
        }

        if (right > left && right>0) {
            s += ')'; right--;
            dfs(s, idx + 1);
            s.pop_back(); right++;
        }

        return;
    }

    vector<string> generateParenthesis(int n) {
        left = n; right = n;
        limit = 2 * n;
        string s;
        dfs(s,0);

        return ans;
    }
};
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
阿里打赏 微信打赏
原文地址:https://www.cnblogs.com/itdef/p/14522254.html