IncredibleThings

导航

LeetCode-Permutations II

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]
]
public class Solution {
    public List<List<Integer>> permuteUnique(int[] nums) {
        if(nums==null || nums.length==0){
            return null;
        }
        List<List<Integer>> resList=new ArrayList<List<Integer>>();
        List<Integer> item=new ArrayList<Integer>();
        boolean[] isVisited=new boolean[nums.length];
        Arrays.sort(nums);
        backTracking(nums, item, resList, isVisited);
        return resList;
    }
    public void backTracking(int[] nums, List<Integer> item, List<List<Integer>> resList, boolean[] isVisited){
        if(item.size()==nums.length){
            resList.add(new ArrayList<Integer>(item));
            return;
        }
        for(int i=0; i<nums.length; i++){
            if(i>0 && nums[i]==nums[i-1] && !isVisited[i-1]){
                continue;
            }
            if(!isVisited[i]){
                item.add(nums[i]);
                isVisited[i]=true;
                backTracking(nums, item, resList, isVisited);
                item.remove(item.size()-1);
                isVisited[i]=false;
            }
        }
    }
}

 

posted on 2016-08-24 03:51  IncredibleThings  阅读(137)  评论(0编辑  收藏  举报