您的位置:首页 > 其它

[LeetCode]047-Permutations II

2016-05-07 14:54 288 查看
题目:

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].

Solution:

直接运用nextPermutation的思想。nextPermutation,按照字典序排序的,字符串的下一个字典序全排列。

class Solution {
public:
void nextPermutation(vector<int>& nums)
{
int  N = nums.size();

int i = N - 1;

while(i > 0 && (nums[i-1] >= nums[i]))
i--;

int j = i;
while( j < N && i != 0 && nums[j] >nums[i-1])
j++;

if(i == 0)
reverse(nums.begin(),nums.end());
else
{
swap(nums[i-1],nums[j-1]);
reverse(nums.begin()+i,nums.end());
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {

vector<vector<int>> ret;
vector<int> temp = nums;
ret.push_back(temp);
nextPermutation(temp);
while(temp != nums)
{
ret.push_back(temp);

nextPermutation(temp);
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode