首页 > 其他 > 详细

LeetCode 22. 括号生成 DFS

时间:2021-03-12 12:26:36      阅读:23      评论:0      收藏:0      [点我收藏+]

地址 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;
    }
};

 

LeetCode 22. 括号生成 DFS

原文:https://www.cnblogs.com/itdef/p/14522254.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!