Permutations II
来源:互联网 发布:笔记本如何安装软件 编辑:程序博客网 时间:2024/05/29 18:57
题目大意,求一个数组的全排序,这个数组可能会有重复的数
跟poj的题目一样,具体见http://blog.csdn.net/xiaoxiaoluo/article/details/8169537
#include <algorithm>#include <vector>using namespace std;class Solution {public: vector<vector<int> > permuteUnique(vector<int> &num) { bool flag = false; vector<vector<int> > result; sort(num.begin(), num.end()); do { flag = false; result.push_back(num); int i, j; for(i = num.size() - 1; i > 0; i--) { if(num[i] > num[i - 1]) { flag = true; break; } } if(flag) { for(j = num.size() - 1; j >= i; j--) { if(num[j] > num[i - 1]) { swap(num[j], num[i - 1]); reverse(num, i, num.size() - 1); break; } } } } while(flag); return result; }private: void reverse(vector<int> &num, int begin, int end) { for(int i = begin, j = end; i < j; i++, j--) { swap(num[i], num[j]); } }};
另一种递归的方法。
为了去掉重复的情况,要加一个可交换的判断函数。
若第i个数字与第j个数字交换,必须满足[i, j)区间内,没有数与第j个数字相等
#include <algorithm>#include <vector>using namespace std;class Solution {public: vector<vector<int> > permuteUnique(vector<int> &num) { vector<vector<int> > result; sort(num.begin(), num.end()); permuteUniqueAssist(num, 0, result); return result; }private: void permuteUniqueAssist(vector<int> &num, int start, vector<vector<int> > &result) { if(start >= num.size()) { result.push_back(num); return; } for(int i = start; i < num.size(); i++) { if(i == start || canSwap(num, start, i) ){ swap(num[start], num[i]); permuteUniqueAssist(num, start + 1, result); swap(num[start], num[i]); } } } bool canSwap(vector<int> &num, int start, int end) { for(int i = start; i < end; i++) { if(num[i] == num[end]) { return false; } } return true; }};
0 0
- 【LeetCode】Permutations && Permutations II
- leetcode: Permutations/Permutations II
- leetcode Permutations & Permutations II
- [Leetcode]Permutations && Permutations II
- Permutations and Permutations II
- Permutations && Permutations ii
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- Permutations II
- 什么是缓存?
- 数据库第一次作业(陶春梅)
- r语言 之自己构建package
- (转)设计模式(1):单例模式
- 【ACM之旅】补写函数
- Permutations II
- 自定义函数初步了解
- 内核延时函数
- 二级缓存ehcache
- LeetCode - TwoSumII - Frequent
- 日拱一卒(十)
- Java线程:并发协作-生产者消费者模型
- VB.net使用SerialPort类访问串口
- getAllAPP+PopupWindow