题目
代码
var generateParenthesis = function(n) {
const track = []
const res = []
// 列出所有的情况
function backTrack(left, right, track) {
if (left < 0 || right < 0) return
if (left > right) return // 所需左括号数量要小于等于所需右括号的数量
if (left === 0 && right === 0) {
res.push(track)
return
}
for (let i = 0; i < 2; i++) {
// 做出选择
if (i === 0) {
track.push('(')
// 回溯:遍历穷举每个位置
backTrack(left-1, right, [...track])
// 撤销选择
track.pop()
} else {
track.push(')')
backTrack(left, right-1, [...track])
track.pop()
}
}
}
backTrack(n, n, track)
return res.map(item => item.join(''))
};
参考资料
- 回溯算法最佳实践:括号生成