题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
代码
简单回溯,左括号数小于长度一半才能加左括号,左括号数多于右括号数才能加右括号
class Solution {
public:
void getAll(vector<string>& v,int left,int right,string& str,int& len){
if(str.length()==len){
v.push_back(str);
return;
}
if(left<len/2){
str+='(';
getAll(v,left+1,right,str,len);
str.erase(str.length()-1);
}
if(left>right){
str+=')';
getAll(v,left,right+1,str,len);
str.erase(str.length()-1);
}
}
vector<string> generateParenthesis(int n) {
if(n==0)return {};
int len=2*n;
vector<string> v;
string str;
getAll(v,0,0,str,len);
return v;
}
};