
全排列II
发布日期:2021-05-09 00:28:56
浏览次数:23
分类:博客文章
本文共 1142 字,大约阅读时间需要 3 分钟。
全排列II
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例
输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]
题解
/** * @param {number[]} nums * @return {number[][]} */var permuteUnique = function(nums) { var target = []; recursive(nums, [], target, 0, {}); return target;};function recursive(nums, tmp, target, deep, hashTable){ if(deep === nums.length) { var targetTmp = tmp.map( v => nums[v] ); var targetTmpStr = JSON.stringify(targetTmp); if(!hashTable[targetTmpStr]) { hashTable[targetTmpStr] = true; target.push([...targetTmp]); } return 0; } for(let i=0; i
思路
整体思路是利用回溯加去重的方式,在具体递归的过程中类似于一棵决策树,首先定义一个用于递归的函数,分别传递原数组的引用、暂存数组索引的引用、目标数组的引用、递归深度、哈希表对象,如果递归的深度与原数组的长度相同,那么就在暂存数组中使用索引取出原数组的值,将更新变量转换为字符串,因为在Js
中对象也是以HashTable
进行存储的,便可以直接利用Js
对象来实现哈希表,将转换的字符串作为键值放置于哈希表,目的是之后再次出现这个字符串那么就不再放入目标数组以达到去重的目的,如果目前的HashTable
还不存在该key
,那么就将取得的原数组值作浅拷贝放置于目标数组,接下来是递归方案,在递归过程中已经出现在暂存数组的索引值就不再继续递归,利用回溯法实现一棵决策树,从而实现全排列。
1 2 3 2 3 1 3 1 23 2 3 1 2 1
每日一题
https://github.com/WindrunnerMax/EveryDay
题源
https://leetcode-cn.com/problems/permutations-ii/submissions/
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月10日 14时11分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
tf.tuple
2019-03-17
Java面试宝典(2020版)
2019-03-17
2020年云南省专升本 - 「计算机」专业各院校招生计划
2019-03-17
算法 顺序查找/折半查找/冒泡排序/选择排序(待改)
2019-03-17
浏览器打开winscp 系统错误。代码:5。 拒绝访问。
2019-03-17
Kubernetes 无法查询到并且无法删除pod实例的排查过程
2019-03-17
android中button修改不了背景颜色
2019-03-17
(网络安全)主动信息收集 操作系统识别
2019-03-17
github 入门
2019-03-17
社区医疗app-Ui设计
2019-03-21
HTML 表单验证
2019-03-21
mysql时间为0000-00-00 00:00:00时,程序读取错误
2019-03-21
ubuntu System program problem detected
2019-03-21
使用ivx图表组件的经验总结
2019-03-21
17场演讲,500+嘉宾 |「观远2020智能决策峰会暨产品发布会」看点先知道
2019-03-21
Redis学习笔记—单个键管理
2019-03-21
一个简单的游戏框架[汇总]
2019-03-21
免费好用的证件扫描仪-扫描全能王
2019-03-21