LintCode:M-带重复元素的排列

LintCode链接


给出一个具有重复数字的列表,找出列表所有不同的排列。

样例

给出列表 [1,2,2],不同的排列有:

[
  [1,2,2],
  [2,1,2],
  [2,2,1]
]

import java.util.*;
class Solution {
    /**
     * @param nums: A list of integers.
     * @return: A list of unique permutations.
     */
    public List> permuteUnique(int[] nums) {
        // Write your code here
        List> res = new ArrayList> ();
        int n = nums.length;
        Arrays.sort(nums);
        int[] visited = new int[n];
        
        helper(res, new ArrayList(), nums, visited);
        
        return res;
    } 
    
    void helper(List> res, List tRes, int[] nums, int[] visited){
        if(tRes.size()==nums.length){
            List tmp = new ArrayList();
            tmp.addAll(tRes);
            res.add(tmp);
            return;
        }
        
        for(int i=0; i=0 && visited[i-1]==0 && nums[i-1]==nums[i])){
                continue;
            }else{
                visited[i]=1;
                tRes.add(nums[i]);
                helper(res, tRes, nums, visited);
                tRes.remove(tRes.size()-1);
                visited[i]=0;
            }
        }
    }
}




你可能感兴趣的:(全排列,LintCode,Medium)