Permutations II

Description

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

Challenge

Using recursion to do it is acceptable. If you can do it without recursion, that would be great!

Related problems

Next Permutation II

Permutation Sequence

Next Permutation

Permutations

Implementation

Link: http://lintcode.com/en/problem/permutations-ii/

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> > ret;
        vector<int> path;
        vector<int> visit(nums.size(), 0);

        if(nums.size() == 0){
            ret.push_back(path);
            return ret;   
        }

        sort(nums.begin(), nums.end());

        helper(ret, path, visit, nums, 0);
        return ret;
    }

    void helper(vector<vector<int> > & ret, vector<int> & path, vector<int> & visit, vector<int> & nums, int step){

        if(nums.size() == step){
            ret.push_back(path);
            return;
        }

        for(int i = 0; i < nums.size(); i++){
            if(visit[i] == 0){
                visit[i] = 1;
                path.push_back(nums[i]);
                helper(ret, path, visit, nums, step + 1);
                path.pop_back();
                visit[i] = 0;
                while(i + 1 < nums.size() && nums[i + 1] == nums[i]) i++;
            }
        }
    }
};

results matching ""

    No results matching ""