LeetCode-Permutations II

来源:互联网 发布:商侃的淘宝店 编辑:程序博客网 时间:2024/05/18 02:33

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:

Code:

<span style="font-size:14px;">class Solution {public:    bool valid(vector<int> &num, int begin, int end) {        for (int i = begin; i < end; ++i)            if (num[i] == num[end]) return false;        return true;    }        void helper(vector<vector<int> > &results, vector<int> &num, const int &length, int index) {        if (index == length) {            results.push_back(num);            return;        }        helper(results, num, length, index+1);        for (int i = index+1; i < length; ++i)            if (valid(num, index, i)) {                swap(num[index], num[i]);                helper(results, num, length, index+1);                swap(num[index], num[i]);            }    }        vector<vector<int> > permuteUnique(vector<int> &num) {        vector<vector<int> > results;        const int length = num.size();        if (length == 0) return results;        if (length == 1) {            results.push_back(num);            return results;        }        sort(num.begin(), num.end());        helper(results, num, length, 0);        return results;    }};</span>



0 0