LeetCode第47.题之Permutations II
来源:互联网 发布:马原人工智能与意识 编辑:程序博客网 时间:2024/05/21 17:43
这题和上一题唯一的差别是数组多了重复的元素,所以我首先想到的是STL中计算排列组合关系的算法(这是我以前写的一篇博客)(该算法也适合上一题),具体思想见那篇博客,下面我直接给出C++代码:
#include <iostream>#include <algorithm>#include <vector>using namespace std;class Solution {public: vector<vector<int>> permuteUnique(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int>> res; if (nums.size() == 0) { return res; } else if (nums.size() == 1) { res.push_back(nums); return res; } int n = nums.size(); vector<int>::iterator pre_it= nums.end(); vector<int>::iterator it; for (;;) { pre_it= nums.end(); --pre_it; it = pre_it; --pre_it; //从后往前找一对相邻的迭代器,前一个迭代器表示的数小于后一个迭代器表示的数 while (pre_it != nums.begin() && *pre_it >= *it) { it = pre_it; -- pre_it; } //如果前一个迭代器表示的数小于后一个迭代器表示的数 if(*pre_it < *it) { //从后往前找第一个大于pre_it表示的数(一定存在) vector<int>::iterator temp_it = nums.end(); --temp_it; while (*temp_it <= *pre_it) --temp_it; //交换这两个数,然后重新排序,即可得到下一个逆序 iter_swap(pre_it, temp_it); sort(it, nums.end()); res.push_back(nums); } //如果pre_it指向第一个元素,则将数组中的元素逆序然后保存下来,这是最后一个排列 else { reverse(nums.begin(), nums.end()); res.push_back(nums); return res; } } }};int main(){ Solution s; vector<int> v; v.push_back(1); v.push_back(3); v.push_back(1); vector<vector<int>> res = s.permuteUnique(v); //输出结果 for (vector<vector<int>>::iterator ita=res.begin();ita!=res.end();++ita) { for (vector<int>::iterator itb=ita->begin();itb!=ita->end();++itb) { cout<<*itb<<'\t'; } cout<<endl; } return 0;}
0 0
- LeetCode第47.题之Permutations II
- leetcode之Permutations II
- 【Leetcode】之Permutations II
- [LeetCode]47.Permutations II
- LeetCode 47.Permutations II
- LeetCode --- 47. Permutations II
- [Leetcode] 47. Permutations II
- [leetcode] 47.Permutations II
- LeetCode 47. Permutations II
- 47. Permutations II LeetCode
- Leetcode 47. Permutations II
- LeetCode 47. Permutations II
- LeetCode - 47. Permutations II
- [LeetCode] 47. Permutations II
- leetcode 47. Permutations II
- [LeetCode]--47. Permutations II
- [LeetCode]--47. Permutations II
- [leetcode] 47. Permutations II
- 语言设计的分类
- 答疑java集合问题
- 我的kafka JAVA调试代码
- Android 框架练成 教你打造高效的图片加载框架
- “再按一次返回键退出程序”实现
- LeetCode第47.题之Permutations II
- Harris角点检测原理及实现
- 《AngularJS》----$apply 与 $watch
- 关于最近使用imageMagick的Jmagick和im4java
- 莫比乌斯反演 bzoj 2301: [HAOI2011]Problem b模板
- HDU 1063 && POJ 1001 Exponentiation (JAVA浮点数大数)
- cookie与session区别
- Android Https相关完全解析 当OkHttp遇到Https
- 如何将Unity中的脚本文件转为dll文件