leetcode全排列问题

2018-10-30  本文已影响0人  HannahLi_9f1c

1.leetcode47

题目:

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入:[1,1,2]输出:[  [1,1,2],  [1,2,1],  [2,1,1]]

太菜了,这种题都是有固定模吧的,但是在细节上处理不好所以就写不对。这里的防止重复是先数组排序,然后重复的就跳过去。


public List<List<Integer>> permuteUnique(int[] nums) {

        Arrays.sort(nums);

        //List<List<Integer>>list=new ArrayList<List<Integer>>();

        List<List<Integer>>list=new ArrayList<List<Integer>>();

        boolean tg[]=new boolean[nums.length];

        Solve(list,nums,tg,new ArrayList<Integer>());

        return list;

    }

    private void Solve( List<List<Integer>>list,int[]nums,boolean[]tg,List<Integer>tmp){

        //System.out.println(tmp.size());

        if(tmp.size()==nums.length){

              list.add(new ArrayList<Integer>(tmp));

            return;

        }

        for(int i=0;i<nums.length;i++){

            if(tg[i] || i > 0 && !tg[i-1] && nums[i] == nums[i-1]) continue;

                tmp.add(nums[i]);

              // System.out.println(nums[i]);

                tg[i]=true;

                Solve(list,nums,tg,tmp);

                tg[i]=false;

                tmp.remove(tmp.size()-1);//之前这句没加上就导致结果很奇怪。

        }

    }


上一篇下一篇

猜你喜欢

热点阅读