博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode Permutations II 无重全排列
阅读量:7194 次
发布时间:2019-06-29

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

作者:jostree   

题目链接:

题目要求对有重复的数组进行无重全排列。为了保证不重复,类似于全排列算法使用dfs,将第一个数字与后面第一次出现的数字交换即可。例如对于序列1,1,2,2

有如下过程:

1,1,2,2 -> 1,1,2,2 -> 1,1,2,2 -> 1,1,2,2

           -> 1,2,1,2 -> 1,2,1,2

                -> 1,2,2,1

    -> 2,1,1,2 -> 2,1,1,2 -> 2,1,1,2

                -> 2,1,2,1

           -> 2,2,1,1 -> 2,2,1,1

代码中使用set来记录数字是否在前面出现过,如果出现过,则不与第一个数字进行交换。

代码如下:

1 class Solution { 2 public: 3 void swap(int &a, int &b) 4 { 5     int tmp = a; 6     a = b; 7     b = tmp; 8 } 9 void p(vector
&num, vector
> &res, int begin) 10 {11 if( begin == num.size() )12 {13 vector
tmp;14 for( int i = 0 ; i < num.size() ; i++ )15 {16 tmp.push_back(num[i]);17 }18 res.push_back(tmp);19 }20 else21 {22 set
used;23 for( int i = begin ; i < num.size() ; i++ )24 {25 if(!used.count(num[i]))26 {27 used.insert(num[i]);28 swap(num[i], num[begin]);29 p(num, res, begin+1);30 swap(num[i], num[begin]);31 }32 }33 }34 }35 vector
> permuteUnique(vector
&num) 36 {37 vector
>res;38 if( num.size() == 0 )39 {40 return res;41 }42 sort(num.begin(), num.end());43 p(num, res, 0);44 return res;45 }46 };
View Code

 

转载于:https://www.cnblogs.com/jostree/p/4051277.html

你可能感兴趣的文章
[转] sql存储过程去锁
查看>>
bzoj1242(弦图判定)
查看>>
谈谈熔断与降级
查看>>
洛谷P4513 小白逛公园
查看>>
类变量、成员变量、实例变量、局部变量、静态变量、全局变量的解释
查看>>
如何构建数据化管理体系
查看>>
python 面向对象高级编程
查看>>
Spring MVC MultiActionController example
查看>>
String类的subString(a,b)方法(基于jdk 1.9)
查看>>
进程池
查看>>
javaweb web.xml文件详解
查看>>
Android 动画:你真的会使用插值器与估值器吗?
查看>>
ubuntu虚拟化平台libvrit-bin
查看>>
comgt拨号
查看>>
[考试]20150919-20150921
查看>>
$.getJSON无法对外部变量进行赋值的问题
查看>>
FFmpeg(三) 编解码相关函数理解
查看>>
4.Git的安装
查看>>
jquery中的event
查看>>
文件打开与读入
查看>>