Skip to content

47. 全排列2 ​

  • 题号:47
  • 来源:LeetCode
  • 难度:中等
  • 标签:回溯 排列
  • 语言:TypeScript
  • 解法:1 个
  • 作者:lmliheng
  • 最近更新:2026-09-27

TypeScript · O(n*n!) 时间 · O(n) 空间 · 更新于 2026-09-27

回溯全排列后用Set去重,未做剪枝

typescript
/**
 * @difficulty medium
 * @tags 回溯,排列
 * @time O(n*n!)
 * @space O(n)
 * @note 回溯全排列后用Set去重,未做剪枝
 * @47. 全排列 II
 */


function permuteUnique(nums: number[]) {

    let res: number[][] = []
    const backtrack = (nums: number[], path: number[], used: boolean[]) => {
        if (path.length === nums.length) {
            res.push([...path]) // 深拷贝,不能直接push(path),放进去的只是path的路径
            return
        }
        for (let i = 0; i < nums.length; i++) {
            if (used[i]) {
                continue
            }
            used[i] = true
            path.push(nums[i])
            backtrack(nums, path, used)

            path.pop()
            used[i] = false

        }

    }


    let path: number[] = []
    let used = new Array(nums.length).fill(false)
    backtrack(nums, path, used)
    let set: Set<string> = new Set()
    for (let i = 0; i < res.length; i++) {
        let str = res[i].toString()
        if (set.has(str)) {
            continue
        } else {
            set.add(str)
        }

    }

    return [...set].map(item => item.split(',').map(item => +item))

};

源码:ts/leetcode/47. 全排列2.ts


在 GitHub 上查看题目所在目录:lmliheng/algorithm