生成括号
给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
样例
给定 n = 3
, 可生成的组合如下:
"((()))", "(()())", "(())()", "()(())", "()()()"
类似递归遍历二叉树的思想
public:
/**
* @param n n pairs
* @return All combinations of well-formed parentheses
*/
void makequote(int size, int leftnum, int rightnum, string &str, vector<string> &vstr)
{
if(size == 0)
{
vstr.push_back(str);
return;
}
if(leftnum>0)
{
str.insert(str.size(),"(");
makequote(size - 1, leftnum - 1, rightnum, str, vstr);
str = str.substr(0,str.size()-1);
}
if(leftnum<rightnum && rightnum>0)
{
str.insert(str.size(),")");
makequote(size - 1, leftnum , rightnum - 1, str, vstr);
str = str.substr(0,str.size()-1);
}
}
vector<string> generateParenthesis(int n) {
// Write your code here
vector<string> vstr;
string str;
makequote(2*n, n, n, str, vstr);
return vstr;
}
};