回溯:生成数组的所有全排列。

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
}

同分类其他题目