zoukankan      html  css  js  c++  java
  • 46. 全排列

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

    示例:

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

    class Solution {
        public List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> lists = new ArrayList<>();
            if(nums == null || nums.length == 0) return lists;
            boolean[] visited = new boolean[nums.length];
            bt(nums,new ArrayList<>(),lists,visited);
            return lists;
        }
        private void bt(int[] nums,List<Integer> list,List<List<Integer>> lists,boolean[] visited){
            if(list.size() == nums.length){
                lists.add(new ArrayList<>(list));
                return;
            }
            for(int j = 0;j < nums.length;j++){
                if(!visited[j]){
                    visited[j] = true;
                    list.add(nums[j]);
                    bt(nums,list,lists,visited);
                    visited[j] = false;
                    list.remove(list.size() - 1);
                }
            }
        }
    }

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

    示例:

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

    class Solution {
        public List<List<Integer>> permuteUnique(int[] nums) {       
            List<List<Integer>> lists = new ArrayList<>();
            if(nums == null || nums.length == 0) return lists;
            boolean[] visited = new boolean[nums.length];
            //需要排序先
            Arrays.sort(nums);
            bt(nums,new ArrayList<>(),lists,visited);
            return lists;
        }
        private void bt(int[] nums,List<Integer> list,List<List<Integer>> lists,boolean[] visited){
            if(list.size() == nums.length){
                lists.add(new ArrayList<>(list));
                return;
            }
            for(int j = 0;j < nums.length;j++){
                if(visited[j] || (j > 0 && nums[j] == nums[j - 1] && !visited[j - 1])){
                    continue;
                }
                visited[j] = true;
                list.add(nums[j]);
                bt(nums,list,lists,visited);
                visited[j] = false;
                list.remove(list.size() - 1);
                
            }
        }
    }
    一回生,二回熟
  • 相关阅读:
    js概念理解
    web性能瓶颈
    http协议
    jquery插件开发
    Razor(cshtml)
    从局域网内的其他Linux主机下载文件
    Java多线程学习笔记
    java中String s="abc"及String s=new String("abc")详解
    Object中toString方法
    DAO层,Service层,Controller层、View层、entity层
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12666342.html
Copyright © 2011-2022 走看看