【题目描述】
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
【解答】
生成所有左括号和右括号的排列,检查是否合法
(多一个剪枝,判断一下当前是否能加右括号)
- class Solution {
- void find(vector<string>& ans, string& cur, int i, int j, int n) {
- if (cur.size() == n * 2) {
- ans.push_back(cur);
- return;
- }
- if (i < n) {
- cur.push_back('(');
- find(ans, cur, i + 1, j, n);
- cur.pop_back();
- }
- if (j < i) {
- cur.push_back(')');
- find(ans, cur, i, j + 1, n);
- cur.pop_back();
- }
- }
- public:
- vector<string> generateParenthesis(int n) {
- vector<string> ans;
- string s;
- find(ans, s, 0, 0, n);
- return ans;
- }
- };