LeetCode---Permutations II
2015-12-15 10:37
477 查看
题目大意:给出一个包含重复元素的数组,找出该数组所有可能的唯一排列。
算法思想:字典序法。
1.对数组排序,将初始序列放入结果中。
2.找出p=max{i|a[i]<a[i+1]}
3.找出q=max{j|a[j]>a[p]}
4.swap(a[p],a[q])
5.将a[p+1]之后的元素倒序。
6将生成的结果保存起来。
7.重复2~6.
代码如下:
算法思想:字典序法。
1.对数组排序,将初始序列放入结果中。
2.找出p=max{i|a[i]<a[i+1]}
3.找出q=max{j|a[j]>a[p]}
4.swap(a[p],a[q])
5.将a[p+1]之后的元素倒序。
6将生成的结果保存起来。
7.重复2~6.
代码如下:
class Solution { public: vector<vector<int> > permuteUnique(vector<int>& nums) { vector<vector<int> > res; if (nums.size() == 0) return res; sort(nums.begin(),nums.end()); res.push_back(nums); while (1){ int p = -1, q = -1; for(int i=nums.size()-2;i>=0;--i){ if (nums[i] < nums[i + 1]) { p = i; break; } } if (p != -1){ for (int j = nums.size() - 1; j>p; --j){ if (nums[j] > nums[p]){ q = j; break; } } swap(nums[p], nums[q]); int start = p + 1, end = nums.size() - 1; while (start < end){ swap(nums[start], nums[end]); ++start; --end; } res.push_back(nums); } else break; } return res; } };
相关文章推荐
- android 修改键盘enter图标,设置搜索等图标
- (十二)swift UIButton 九宫格
- 找到了ffmpeg的vs编码方法
- ubuntu 14.04下scp传输文件出现ssh: connect to host ***port 22: Connection timed out
- iOS音频播放(二):AudioSession
- poj 3250 Bad Hair Day (单调栈)
- error: neither -p product specified nor ANDROID_PRODUCT_OUT set
- FloatingActionButton(FAB)的官方使用方法
- html+css+js开发oppo音乐展示特效
- CentOS学习笔记之<虚拟机能ping通同一网关的其他机器,ping不通主机>
- 神经网络与支持向量机的区别
- java synchronized详解
- solr服务器的搭建 for windows
- select 回显
- iOS音频播放(一):概述
- centos6 安装 docker
- Spring MVC入门(1)――非注解方式
- 机器学习--K-means算法(聚类,无监督学习)
- accept是又产生一个Socket端口吗?
- 多线程