#989 | 2022-03-28 13:41:40
// 链接:https://leetcode-cn.com/problems/permutations
// 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

// 输入:nums = [1,2,3]
// 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

// console.log(permute([1,2,3]))
function permute (nums) {
  if (nums.length === 1) return [nums]
  const arr = nums.slice()
  const last = arr.pop()
  const subs = permute(arr)
  return [].concat(...subs.map(v => insert(v, last)))
}

// console.log(insert([1, 2], 3))
function insert (arr, v) {
  const result = []
  for (let i = 0; i <= arr.length; i++) {
    const t = arr.slice()
    t.splice(i, 0, v)
    result.push(t)
  }
  return result
}