class Solution {
public:
/**
*
* @param n int整型
* @return string字符串vector
*/
void backtrack(vector<string>& res, string& cur, int open, int close, int n) {
if(cur.size() == n * 2) { // 如果cur有2n个元素,即n对括号全部入队
res.push_back(cur);
return;
}
if(open < n) { // 当左括号入队数量不超过n,将左括号入队,同时将open+1,
cur.push_back('(');
backtrack(res, cur, open + 1, close, n);
cur.pop_back(); // 返回原来状态
}
if(close < open) { // 当右括号数小于左括号数时,将右括号入队
cur.push_back(')');
backtrack(res, cur, open, close + 1, n);
cur.pop_back(); // 返回原来状态
}
}
vector<string> generateParenthesis(int n) {
// write code here
vector<string> res; // 最后结果
string current; // 当前排序情况
backtrack(res, current, 0, 0, n);
return res;
}
};