Leetcode 47 Permutations II

来源:互联网 发布:淘宝买家秀怎么发视频 编辑:程序博客网 时间:2024/05/24 00:20

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

class Solution {public:    typedef vector<int>::iterator It;    vector<vector<int>> permuteUnique(vector<int>& nums) {        vector<vector<int> > ret;        recurce(nums, 0, ret);        return ret;    }private:    void recurce(vector<int>& nums, size_t pos, vector<vector<int> >& ret) {        size_t size = nums.size();        if (pos == size - 1) {            ret.push_back(nums);            return;        }        // 防止重复        vector<int> flag(1, nums[pos]);        // 做交换,原序排列        recurce(nums, pos + 1, ret);        for (size_t i = pos + 1; i < size; ++i) {            int val = nums[i];            if (flag.end() == find(flag.begin(), flag.end(), val)) {                flag.push_back(val);                swap(nums[pos], nums[i]);                recurce(nums, pos + 1, ret);                swap(nums[pos], nums[i]);            }        }    }};
原创粉丝点击