Leetcode——047
2016-04-24 10:03
267 查看
/*
47. Permutations II My Submissions QuestionEditorial Solution
Total Accepted: 69185 Total Submissions: 247339 Difficulty: Medium
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].
Subscribe to see which companies asked this question
Show Tags
Show Similar Problems
*/
/*
解题思路:
求取数组的所有的字典序组合,首先要对整个数组进行从小到大排序。可以使用STL中的函数next_permutation 来直接获得下一个组合。(如果不想用,可以自己去实现next_permutation这个函数),这个函数也是比较容易实现的,具体实现看以下代码补充;
*/
class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { //如果没有元素直接返回 if(nums.size()==0)return {}; //对数组进行排序 sort(nums.begin(),nums.end()); //结果集合 vector<vector<int>> res; do{ //将每一个结果存入结果集合中 res.push_back(nums); }while(next_permutation(nums.begin(),nums.end())); return res; } };
/*
代码补充:
*/
bool my_next_permutation(vector<int>&num){ int i, j; //从后往前找第一个下降点 for (i = num.size() - 1; i > 0; i--){ if (num[i] > num[i - 1])break; } //如果没有找到下降点,则说明已经到了最大值 if (i == 0)return false; //在从后往前找第一个大于那个小点的数字,进行交换 for (j = num.size() - 1; j > i - 1; j--){ if (num[j] > num[i - 1]){ swap(num[j], num[i - 1]); //交换后,将后半部分进行升序排列 reverse(num.begin() + i, num.end()); break; } } return true; }
相关文章推荐
- android图形之setClickable,setEnable,setFocusable区别
- 微信运营案例分析
- 记一次酷派尚锋Y75刷机
- 再说最后一次!关于不再更新SkySRS的理由!
- OnTouchListener的使用
- 摄像机码流的计算
- 微信开发
- hdu1170Balloon Comes!
- java的覆盖重写隐藏和C#中的不同
- Cool Edit Pro 2.0详细教程(转)
- Mac下OpenGL环境搭建以及OpenGL解析渲染OBJ模型
- 简单的UDP通信的例子
- hdu 1723(简单dp)
- qt类型转换
- 浦东街镇医保卡制卡网点地址电话
- bond 双网卡绑定
- 盒子模型补充知识汇总
- 读取文件
- win8下命令行解决Socket Error10048:Adress already in use问题
- JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String