0
点赞
收藏
分享

微信扫一扫

数据可视化视频制作

题目描述:

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 8

题目链接:

. - 力扣(LeetCode)

解题主要思路:

理清楚什么时候可以加 '(',什么时候可以加 ')'即可。

什么时候可以加 '(' ?当左括号的数量小于题目要求n的时,就可以➕左括号;

当右括号的数量小于左括号时,就可以➕右括号;

当右括号的数量==题目要求n时,说明无需再往下递归,将path结果插入到ret中即可。

解题代码:

class Solution {
public:
    int left, right, n;
    vector<string> ret;
    string path;
    vector<string> generateParenthesis(int _n) {
        n = _n;
        dfs();
        return ret;
    }
    void dfs()
    {
        if (right == n) {
            ret.push_back(path);
            return;
        }
        if (left < n) {  // 添加左括号
            path.push_back('('); ++left;
            dfs();
            path.pop_back(); --left;
        }
        if (right < left) {  // 添加右括号
            path.push_back(')'); ++right;
            dfs();
            path.pop_back(); --right;
        }
    }
};
举报

相关推荐

0 条评论