🌟🌟🌟🌟力扣算法——全排列

193 阅读1分钟

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

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

输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:

输入:nums = [1]
输出:[[1]]

permute = (nums) => {
    const result = []
    nums.length > 1 ? this.backTrack(nums, result, [], nums.length) : result = []
    return result
};

backTrack = (nums, result, track, len) => {
    if (nums.length == 2) {
      result.push([nums[0], nums[1]])
      result.push([nums[1], nums[0]])
      return
    }

    for (let i = 0; i < nums.length; i++) {
      nums.length == len ? track = [] : null
      const arr = nums.slice(0)
      arr.splice(i, 1)
      if (arr.length == 2) {
        result.push([...track, nums[i], arr[0], arr[1]])
        result.push([...track, nums[i], arr[1], arr[0]])
      } else {
        track.push(nums[i])
        this.backTrack(arr, result, track, len)
        track.pop()
      }
    }
}

小结:虽然这题是中等题目,但是我觉得好难😭,比我之前写的题目都要难。写了挺久的,虽然力扣上通过了,但我觉得这个代码挺垃圾的,还没进一步做代码整理,先发上去吧。等我整理好后再把解题思路一起贴上来,真的好难😭,我为什么要让自己写算法题,这是给自己找虐