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);
                
            }
        }
    }
    一回生,二回熟
  • 相关阅读:
    四、系统开发和运行知识(二)
    9.Parameters
    7.Constants and Fields
    四、系统开发和运行知识(一)
    三、操作系统知识(3)
    6.Type and Member Basics
    三、操作系统知识(2)
    5.Primitive, Reference, and Value Types
    4、Type fundamentals
    三、操作系统知识(1)
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12666342.html
Copyright © 2011-2022 走看看