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
    }
  }
}

技术文档集合