题目要求输出n对小括号的所有合法排列。
回溯法典型题目,回溯过程如下:
//i表示当前有i个左括号等待匹配
//k表示当前左括号和右括号的总量为k
void search(int i, int k, int n) {
if(k == 2 * n) {
if(i == 0)
result.push_back(cur);
return;
}
if(i < n && (2 * n - k) > i) {//加入左括号
cur[k] = '(';
search(i + 1, k + 1, n);
}
if(i > 0) { //加入右括号
cur[k] = ')';
search(i - 1, k + 1, n);
}
}