回溯:生成数组的所有全排列。
function permute(nums) {
const res = []
const path = []
const used = new Array(nums.length).fill(false)
function backtrack() {
if (path.length === nums.length) {
res.push([...path])
return
}
for (let i = 0; i < nums.length; i++) {
if (used[i]) continue
used[i] = true
path.push(nums[i])
backtrack()
path.pop() // 撤销选择
used[i] = false
}
}
backtrack()
return res
}- 时间
O(n · n!),空间O(n) - 回溯三要素:路径、选择列表、结束条件;核心是「做选择 → 递归 → 撤销选择」
- 变体:含重复元素需先排序并「同层去重」