23.括号生成
思路:递归,if语句判断临界条件,用字符串追加的形式构建数组。添加一个左括号时,右括号数量加一。添加一个右括号时,右括号数量减1
题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
class Solution {
public:
void gen(string str, int l, int r, vector<string>& ans){
//l表示左括号,r表示右括号,两者都为零时说明已排列完毕
if (l == 0 && r == 0)
ans.push_back(str);
//添加一个左括号时,左括号减一,同时右括号加一
if (l > 0)
gen(str + '(', l-1, r+1, ans);
//添加一个右括号时,右括号减一
if (r > 0)
gen(str + ')', l, r-1, ans);
}
vector<string> generateParenthesis(int n) {
vector<string> ans;
gen("", n, 0, ans);
return ans;
}
};