LeetCode---Permutations II

来源:互联网 发布:教学软件下载 编辑:程序博客网 时间:2024/06/06 18:57

题目大意:给出一个包含重复元素的数组,找出该数组所有可能的唯一排列。

算法思想:字典序法。

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);}elsebreak;}return res;}};


0 0