刷題-力扣-面試題 08.09. 括號
阿新 • • 發佈:2022-03-03
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/bracket-lcci
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
括號。設計一種演算法,列印n對括號的所有合法的(例如,開閉一一對應)組合。
說明:解集不能包含重複的子集。
例如,給出n = 3,生成結果為:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
題目分析
- 根據題目描述,生成合法的括號組合
- 深度優先搜尋,當可以生成的左括號和右括號個數一樣時,只能生成左括號;
當可以生產的左括號個數等於零時,只能生成右括號;
否則即可以生成右括號,又可以生成左括號
程式碼
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; } };