zoukankan      html  css  js  c++  java
  • 全排列问题Ⅱ(Java实现)

    题目:

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

    示例:

    输入: [1,1,2]
    输出:
    [
      [1,1,2],
      [1,2,1],
      [2,1,1]
    ]
    这个问题和我的上一篇问题分析的手法一样,只是多加了“去重”的操作,对于全排列问题没理解的请看上一篇全排列问题Ⅰ(Java实现)博客。
    对于“去重”我有几点说明:
      1.我们可以通过判断List来解决:
    代码如下:
    package edu.ymm.about_permutation;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class per3 {
    	
        public static List<List<Integer>> permute(int[] nums) {
        	List<List<Integer>> lists=new ArrayList<>();
     
            if(nums.length==0||nums==null){
                return lists;
            }
            permute(lists,nums,new ArrayList<>(),0);
            return lists;
        }
     
        private static void permute(List<List<Integer>> lists,int[] nums,  List<Integer> list, int index) {
            //边界值判断
        	if(index==nums.length){
                for(int i = 0;i < nums.length;i++) {
                	list.add(nums[i]);
                }
                if(!lists.contains(list)) { //去重
                	lists.add(new ArrayList<>(list));
                }
                list.clear();
            }else {
            	for(int i=index;i<nums.length;i++){
                    swap(nums,index,i);   //第一次交换定点之后的
                    permute(lists,nums,list,index+1); //进行递归
                    swap(nums,index,i); //这是交换定点的,也就是重新返回上一级进行交换
         
                }
            }   
        }
     
        private static void swap(int[] nums, int index, int i) {
    		int t =nums[index];
    		nums[index] = nums[i];
    		nums[i] = t;
    	}
    
    	public static void main(String[] args){
            int[] nums=new int[]{1,1,3};
            List<List<Integer>> lis=new ArrayList<>();
            lis=permute(nums);
            for(List<Integer> list:lis){
                for(int i:list){
                    System.out.print(i+" ");
                }
                System.out.println();
            }
        }
    }
    
     
  • 相关阅读:
    python操作MySQL数据库
    用python监控您的window服务
    关于position定位中的几个注意点
    filter 滤镜
    git使用心得
    :after,:before,content
    outline和border
    《css揭秘》之背景与边框
    css权威指南学习笔记--第6章
    浅谈setTimeout和setInterval
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/10738319.html
Copyright © 2011-2022 走看看