• 排列问题


    给定一个没有重复数字的序列,返回其所有可能的全排列。

    示例:

    输入: [1,2,3]
    输出:
    [
      [1,2,3],
      [1,3,2],
      [2,1,3],
      [2,3,1],
      [3,1,2],
      [3,2,1]
    ]
    class Solution {
        boolean[] used;
        List<List<Integer>> res=new ArrayList<List<Integer>>();
        List<Integer> temp=new ArrayList<Integer>();
        public List<List<Integer>> permute(int[] nums) {
            if(nums.length==0)
                return res;
            used=new boolean[nums.length];
            helper(nums);
            return res;
        }
        public void helper(int[] nums)
        {
           if(temp.size()==nums.length)
           {
               ArrayList<Integer> fuck=new ArrayList<>(temp);
               res.add(fuck);
               temp.remove(temp.size()-1);
               return ;
           }
           for(int i=0;i<nums.length;i++)
           {
               if(used[i]==false)
               {
                   temp.add(nums[i]);
                   used[i]=true;
                   helper(nums);
                   used[i]=false;
               }
           }
           if(temp.size()>0)
               temp.remove(temp.size()-1);
            return ;
        }
    }

    47. 全排列 II

    给定一个可包含重复数字的序列,返回所有不重复的全排列。
    示例:
    输入: [1,1,2]
    输出:
    [
      [1,1,2],
      [1,2,1],
      [2,1,1]
    ]
    class Solution {
        private List<List<Integer>> res=new ArrayList<>();
        private boolean[] used;
        public List<List<Integer>> permuteUnique(int[] nums) {
            used=new boolean[nums.length];
            List<Integer> list=new ArrayList<>();
            Arrays.sort(nums);
            helper(nums,list);
            return res;
        }
        public void helper(int[] nums,List<Integer> list)
        {
            if(list.size()==nums.length)
            {
                res.add(new ArrayList<Integer>(list));
                return ;
            }
            for(int i=0;i<nums.length;i++)
            {
                if(used[i]==true)
                    continue;
                if(i>0&&nums[i-1]==nums[i]&&used[i-1]==false)
                    continue;
                list.add(nums[i]);
                used[i]=true;
                helper(nums,list);
                list.remove(list.size()-1);
                used[i]=false;
            }
            return ;
        }
    }

  • 相关阅读:
    第一次作业-准备篇
    个人作业——软件工程实践总结
    团队作业第二次—项目选题报告
    软工实践第三次作业(结对第二次作业)
    软工实践第二次作业(结对第一次作业)
    第一次作业-准备篇
    软工实践|个人作业——软件工程实践总结作业
    软工实践|团队作业第二次—项目选题报告
    软工实践|结对第二次—文献摘要热词统计及进阶需求
    软工实践|结对第一次—原型设计(文献摘要热词统计)
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11426051.html
Copyright © 2020-2023  润新知