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))
};在 GitHub 上查看题目所在目录:lmliheng/algorithm