1. 程式人生 > 其它 >刷題-力扣-面試題 08.09. 括號

刷題-力扣-面試題 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;
    }

};