博客
关于我
leetcode47(全排列II:回溯+哈希去重)
阅读量:277 次
发布时间:2019-03-03

本文共 870 字,大约阅读时间需要 2 分钟。

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]

题解:这是一道枚举+组合的题目,可以用回溯法得到所有的组合情况,只不过序列中存在重复数字,我们需要哈希表来达到去重的目的,具体的做法就是用哈希表记录序列中每个数字的重复个数作为该数字可出现的次数,回溯的过程中要实时更新哈希表,如果回溯的过程中选择了某个数字,则将这个数字在哈希表中对应的可出现次数减1,如果该数字的可出现次数的值变为0,则不能再选择该数字。

class Solution {       Stack
stack=new Stack<>(); List
>res=new ArrayList<>(); public List
> permuteUnique(int[] nums) { Map
map=new HashMap<>(); for(int x:nums){ map.put(x,map.getOrDefault(x,0)+1); } Set
keySet=map.keySet(); backTrace(map,keySet, nums.length); return res; } private void backTrace(Map
map,Set
keySet,int len){ if (stack.size()==len){ res.add(new ArrayList<>(stack)); return; } for(int x:keySet){ if(map.get(x)>0){ map.put(x,map.get(x)-1); stack.push(x); backTrace(map,keySet,len); stack.pop(); map.put(x,map.get(x)+1); } } }}

转载地址:http://nxsl.baihongyu.com/

你可能感兴趣的文章
IP代理给模拟器多开和虚拟机多开提供了哪些帮助?
查看>>
细数哪些网络用户需要换IP?
查看>>
“山东大学移动互联网开发技术教学网站建设”项目实训日志一
查看>>
codeforces1307D 1900分最短路
查看>>
codeforces803F 2100分容斥原理 + 莫比乌斯函数
查看>>
2020牛客暑期多校训练营(第七场) 待补题
查看>>
2020牛客暑期多校训练营(第九场)
查看>>
The 2016 ACM-ICPC Asia Dalian Regional Contest 部分题解
查看>>
8皇后问题 递归 函数调用是重点
查看>>
1541 +1 *2 ²
查看>>
老鼠走迷宫
查看>>
跳马 (和小老鼠走迷宫差不多)
查看>>
ural 1627 生成树计数模板题 基尔霍夫矩阵树定理 + 行列式计算模板
查看>>
cf 977e 思维 + dfs
查看>>
面试别慌!阿里专家带你从【入门+基础+进阶+项目】攻破SpringBoot
查看>>
【Java面试】30个 Java 集合面试必备的问题和答案
查看>>
干了八年的阿里面试官,给大家分享我面试时最爱问的Java面试题
查看>>
华为鸿蒙到底是不是安卓系统套了个壳?
查看>>
redis知识点学习
查看>>
vue出现sockjs-node/info?t=1462183700002 报错解决方案
查看>>