Skip to content
On this page

47. 全排列 II

原题链接:LeetCode 47. 全排列 II

题目描述

给定一个可包含重复数字的序列 nums按任意顺序 返回所有不重复的全排列。

示例 1:

  • 输入: nums = [1,1,2]
  • 输出: [[1,1,2], [1,2,1], [2,1,1]]

示例 2:

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

提示:

  • 1 <= nums.length <= 8

  • -10 <= nums[i] <= 10

难度: Medium


题解代码

javascript
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permuteUnique = function(nums) {
  nums = nums.sort((m, n) => m - n)
  const ret = []
  const used = Array(nums.length).fill(false)
  backTrack(nums, [], ret, used)
  return ret
};
function backTrack (nums, path, ret, used) {
  if (path.length === nums.length) {
    ret.push([...path])
  }
  for (let i = 0; i < nums.length; i++) {
    // TODO: 去重这里好好理解
    if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) continue
    if (!used[i]) {
      path.push(nums[i])
      used[i] = true
      backTrack(nums, path, ret, used)
      path.pop()
      used[i] = false
    }
  }
}

技术文档集合