您的位置:首页 > 其它

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.

代码如下:

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: