Permutations II

来源:互联网 发布:养殖场消毒器淘宝 编辑:程序博客网 时间:2024/05/20 07:14

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],
[2,1,1]
]

方法:与Permutations I代码一样即可通过

class Solution {private:    void next(vector<int> & now){        int start = -1;        for(int i = now.size() - 2; i >= 0 ; --i){            if(now[i]<now[i+1]){                start = i;                break;            }        }        if(start ==-1)            sort(now.begin(),now.end());        else{            for(int j = now.size() - 1; j > start ; --j){                if(now[j] > now[start]){                    swap(now[j],now[start]);                    break;                }            }            reverse(now.begin() + start + 1,now.end());        }    }public:    vector<vector<int>> permuteUnique(vector<int>& nums) {        vector<vector<int>> res;        vector<int> buffer(nums.begin(),nums.end());        res.push_back(buffer);        next(buffer);        while(buffer != nums){            res.push_back(buffer);            next(buffer);        }        return res;    }};
0 0
原创粉丝点击