博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode - Permutations II
阅读量:5157 次
发布时间:2019-06-13

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

2013.12.15 05:30

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,

[1,1,2] have the following unique permutations:
[1,1,2][1,2,1], and [2,1,1].

Solution:

  This time the array may contain duplicates, so I implemented the next_permutation() myself, and called it until all the permutations are traversed.

  You can see the two problems here and find their connection with this problem: and .

  Time complexity is O(n * n! / (a! * b! * c! * ...)), where a, b, c, ... are the number of groups of duplictate elements. Space complexity is O(n).

Accepted code:

1 // 1CE, 2MLE, 1AC, not so easy 2 #include 
3 using namespace std; 4 5 class Solution { 6 public: 7 vector
> permuteUnique(vector
&num) { 8 // IMPORTANT: Please reset any member data you declared, as 9 // the same Solution instance will be reused for each test case.10 int i, j;11 int n;12 13 n = result.size();14 for(i = 0; i < n; ++i){15 result[i].clear();16 }17 result.clear();18 19 sort(num.begin(), num.end());20 n = num.size();21 if(n <= 0){22 return result;23 }24 while(true){25 result.push_back(num);26 for(i = n - 1; i > 0; --i){27 if(num[i - 1] < num[i]){28 break;29 }30 }31 if(i <= 0){32 break;33 }34 --i;35 for(j = n - 1; j > i; --j){36 if(num[j] > num[i]){37 break;38 }39 }40 myswap(num[j], num[i]);41 // 2MLE here, reverse(i + 1, n - 1), not reverse(i, n - 1);42 reverse(num, i + 1, n - 1);43 }44 45 return result;46 }47 private:48 vector
> result;49 void myswap(int &x, int &y) {50 int tmp;51 52 tmp = x;53 x = y;54 y = tmp;55 }56 57 void reverse(vector
&num, int left, int right) {58 int i;59 60 if(left > right){61 reverse(num, right, left);62 return;63 }64 65 i = left;66 // 1CE here, how did you submit before even finishing it!!!67 while(i < left + right - i){68 myswap(num[i], num[left + right - i]);69 ++i;70 }71 }72 };

 

转载于:https://www.cnblogs.com/zhuli19901106/p/3474959.html

你可能感兴趣的文章
零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写
查看>>
ASP.NET MVC4 Web API 堆栈将添加指定消息处理功能
查看>>
在Yii2中如何使用xhprof性能分析工具
查看>>
创建Unicode格式的INI文件
查看>>
Map,HashMap,LinkedHashMap,TreeMap比较和理解
查看>>
【公告】新博客、新地址,欢迎交换友链
查看>>
几年前毕业设计做的CAD二次开发
查看>>
命名空间
查看>>
VS2008 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”
查看>>
索引的创建和使用
查看>>
scrapy的全局命令和项目命令
查看>>
GIL 线程池 进程池 同步 异步
查看>>
python日记----2017.7.24
查看>>
ssh 免密码登录
查看>>
前端基础之BOM和DOM
查看>>
浅谈域名发散与域名收敛
查看>>
全球所有货币币种汇总
查看>>
GRUB引导下进Linux单用户模式的三种方式
查看>>
wcf中的Message类
查看>>
3——类定义的基本形式
查看>>