function generateParenthesis(n: number): string[] {
// 采用回溯算法
const ans: string[] = [];
/**
* @param {number} lRemain :左括号剩余数量
* @param {number} rRemain :右括号剩余数量
* @param {string} str :最后生成的结果
*/
function dfs(lRemain: number, rRemain: number, str: string) {
//单个分支的括号字符构建完成
if (str.length === 2 * n) {
ans.push(str);
return;
}
//如果左括号还有剩余,则使用
if (lRemain > 0) {
dfs(lRemain - 1, rRemain, str + "(");
}
//如果右括号的剩余数量大于左括号,(( ))) ,说明 str里左括号更多,则可以使用右括号
if (rRemain > lRemain) {
dfs(lRemain, rRemain - 1, str + ")");
}
}
//递归入口
dfs(n, n, "");
return ans;
}
console.log(generateParenthesis(3));