首页 > 其他 > 详细

*Permutations II

时间:2016-01-13 09:23:20      阅读:155      评论:0      收藏:0      [点我收藏+]

 

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

 

无救了的解法,160ms,打败0.6%...

public class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    HashSet<List<Integer>> set = new HashSet<List<Integer>>(); 

    public List<List<Integer>> permuteUnique(int[] nums) 
    {
        int k = 0;
        int m = nums.length-1;
        perm(nums,k,m);
        for (List<Integer> subset : set) {
            res.add(new ArrayList<Integer> (subset));
        }
        
        return res;
    }
    
    public void perm(int[] nums, int k, int m)
    {
        if(k==m)
        {
            List<Integer> list = new ArrayList<Integer>();
            for(int i=0;i<=m;i++)
            {
                list.add(nums[i]);
            }
            set.add(list);
        }
        else
           for( int i=k; i<=m; i++)
           {
                 swap(nums,k,i);
                 perm(nums, k+1, m);
                 swap(nums,k,i);
           }
    }
    
    public int[] swap(int[] nums, int k, int i)
    {
        int temp = nums[k];
        nums[k] = nums[i];
        nums[i] = temp;
        return nums;
    }
}

 

*Permutations II

原文:http://www.cnblogs.com/hygeia/p/5126211.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!