刷题-力扣-面试题 08.09. 括号

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bracket-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。

说明:解集不能包含重复的子集。

例如,给出 n = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

题目分析

  1. 根据题目描述,生成合法的括号组合
  2. 深度优先搜索,当可以生成的左括号和右括号个数一样时,只能生成左括号;
    当可以生产的左括号个数等于零时,只能生成右括号;
    否则即可以生成右括号,又可以生成左括号

代码

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        insert("", n, n);
        return this->parebthesis;
    }

private:
    std::vector<std::string> parebthesis;
private:
    void insert(const std::string str, const int left, const int right) {
        if (left == 0 && right == 0) {
            this->parebthesis.emplace_back(str);
            return;
        }
        if (left == right) {
            insert(str + '(', left - 1, right);
            return;
        } else if (left == 0) {
            insert(str + ')', left, right - 1);
            return;
        } else {
            insert(str + '(', left - 1, right);
            insert(str + ')', left, right - 1);
            return;
        }
        return;
    }

};
posted @ 2022-03-03 18:25  韩亚光  阅读(27)  评论(0编辑  收藏  举报