题目描述:数字 n 代表⽣成括号的对数,请你设计⼀个函数,⽤于能够⽣成所有可能的并且 有效的 括号组合。示例:输⼊: n = 3输出: ["((()))","(()())","(())()","()(())","()()()"]
本题采用:
- 深度优先搜索DFS(回溯思想):一路走到黑,然后回退,继续走到黑
- 剪枝策略:
- 生成括号失败
- 左括号数小于右括号数;
- 左括号数 / 右括号数大于括号对数n
- 生成括号成功——左括号数=右括号数=括号对数n
- 生成括号失败
function bracket(n) {
const res = [];
function dfs(l, r, str) {
// l,r分别表示左右括号数
// 剪枝
if (l > n || r > n || l < r) return;
// 生成成功,返回
if (l === r && l === n) {
res.push(str);
return;
}
// 加一个左括号
dfs(l + 1, r, str + "(");
// 加一个右括号
dfs(l, r + 1, str + ")");
}
dfs(0, 0, "");
return res;
}