题意理解
给定n对括号,输出所有的合法的括号序列,先左括号后右括号
问题分析
回溯法
其他
怎么想的到?
链接
vector<string> generateParenthesis(int n) {
vector<string> results;
backtrack(results, "", 0, 0, n);
return results;
}
//results是最终结果,cur是部分解,open是左括号数量,close是右括号数量,n是括号对数量
void backtrack(vector<string>& results, string cur, int open, int close, int n)
{
if (cur.size() == 2 * n) //cur长度够了
{
results.push_back(cur); //追加结果
return; //返回
}
if (open < n) //先左括号
{
backtrack(results, cur + "(", open + 1, close, n); //部分解增加,左括号增加
}
if (close < open) //再右括号
{
backtrack(results, cur + ")", open, close + 1, n); //部分解增加,右括号增加
}
}