博客
关于我
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/

你可能感兴趣的文章
2021年安全员-A证(山东省)考试题及安全员-A证(山东省)报名考试
查看>>
2021年G1工业锅炉司炉考试报名及G1工业锅炉司炉模拟考试题库
查看>>
2021年G1工业锅炉司炉考试报名及G1工业锅炉司炉模拟考试题库
查看>>
2021年安全员-B证(山东省)考试内容及安全员-B证(山东省)模拟考试题
查看>>
2021年高压电工考试题库及高压电工找解析
查看>>
从xx离职随笔
查看>>
大数据学习之Spark——00Spark项目的pom.xml文件
查看>>
大数据学习之Spark——01Spark概述
查看>>
大数据学习之Spark——03Spark代码初体验(Word Count)
查看>>
LeetCode0234. 回文链表
查看>>
比特币史话·78 | 有容乃大(2): 零食售卖机
查看>>
比特币史话·96 | 隐私(3): 熔币重铸
查看>>
Filecoin主网上线,它是谁、割了谁?
查看>>
一切不能跑赢比特币的勤奋,都是愚蠢的努力
查看>>
Fire prejudice: 巴菲特搭档芒格首度认可比特币
查看>>
从 MFC 移植程序到 wxWidgets 界面库 ——《定时执行专家 5.0》的界面实现
查看>>
GLUT和wxWidgets在OpenGL开发中的比较
查看>>
CodeBlocks开发wxWidgets环境配置详细
查看>>
Qt 转向 LGPL之后,wxWidgets 路在何方
查看>>
[翻译]2009年6月wxWidgets更新 - 支持图标的wxButton
查看>>