美文网首页
leetcode全排列问题

leetcode全排列问题

作者: HannahLi_9f1c | 来源:发表于2018-10-30 09:06 被阅读0次

    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);//之前这句没加上就导致结果很奇怪。

            }

        }


    相关文章

      网友评论

          本文标题:leetcode全排列问题

          本文链接:https://www.haomeiwen.com/subject/swuwtqtx.html