Lintcode_16 Permutations II

来源:互联网 发布:java 退出程序 编辑:程序博客网 时间:2024/06/11 22:50

Given a list of numbers with duplicate number in it. Find all unique permutations.

Example

For numbers [1,2,2] the unique permutations are:

[  [1,2,2],  [2,1,2],  [2,2,1]]
思路是转化为字符串(中间加“-”), 然后用hash_table来解决:

class Solution {public:    /**     * @param nums: A list of integers.     * @return: A list of unique permutations.     */    vector<vector<int> > permuteUnique(vector<int> &nums) {        // write your code here        vector<vector<int>> res;        if (nums.size() == 0) {            return res;        }        unordered_set<string> set;        queue<pair<vector<int>, pair<vector<int>, string>>> que;        for (int i = 0; i < nums.size(); i++) {            int a = nums[i];            string s;            stringstream ss;            ss << a;            ss >> s;            if (set.find(s) == set.end()) {                set.insert(s);                nums.erase(nums.begin() + i);                pair<vector<int>, string> p = make_pair(nums, s);                vector<int> temp = {a};                que.push(make_pair(temp, p));                nums.insert(nums.begin() + i, a);            }        }        while (!que.empty()) {            vector<int> target = que.front().first;            vector<int> rest = que.front().second.first;            string s_target = que.front().second.second;            que.pop();            if (target.size() == nums.size()) {                res.push_back(target);                continue;            }            int len = rest.size();            for (int i = 0; i < len; i++) {                int a = rest[i];                string s;                stringstream ss;                ss << a;                ss >> s;                if (set.find(s_target + "_" + s) == set.end()) {                    set.insert(s_target + "_" + s);                    target.push_back(a);                    rest.erase(rest.begin() + i);                    pair<vector<int>, string> p = make_pair(rest, s_target + "_" + s);                    que.push(make_pair(target, p));                    target.erase(target.begin() + target.size() - 1);                    rest.insert(rest.begin() + i, a);                }            }        }        return res;    }};


0 0
原创粉丝点击