[LeetCode]047-Permutations II

来源:互联网 发布:淘宝代销怎么取消关联 编辑:程序博客网 时间:2024/05/18 02:54

题目:
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;    }};
0 0
原创粉丝点击