zoukankan      html  css  js  c++  java
  • Leecode no.47 全排列 II

    package leecode;

    import java.util.*;

    /**
    * 47. 全排列 II
    *
    * 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
    *
    * @author Tang
    * @date 2021/12/23
    */
    public class PermuteUnique {

    int nums[];

    List<List<Integer>> resultList;

    /**
    * 回溯
    * 循环n次,表示n个位置
    * 对每个位置循环判断每个元素,要么选择要么不选择 (避免一下重复元素)
    *
    * @param nums
    * @return
    */
    public List<List<Integer>> permuteUnique(int[] nums) {
    this.nums = nums;
    resultList = new ArrayList<>();

    track( new ArrayList<>(), new int[nums.length]);
    return resultList;
    }

    /**
    * 对当前n位置,选择一个合适的元素
    *
    */
    private void track(List<Integer> permuteList, int[] hasChoose) {
    if(permuteList.size() == nums.length) {
    ArrayList<Integer> list = new ArrayList<>();
    for (Integer i : permuteList) {
    list.add(i);
    }
    resultList.add(list);
    return;
    }

    //repeat防止同一位置上选择了重复元素
    Set repeat = new HashSet();

    for(int i = 0; i < nums.length; i++) {
    //递归前做出选择
    if(hasChoose[i] == 1 || repeat.contains(nums[i])) {
    continue;
    }
    permuteList.add(nums[i]);
    repeat.add(nums[i]);
    hasChoose[i] = 1;

    //执行递归
    if(permuteList.size() == 4) {
    System.out.println();
    }
    track(permuteList, hasChoose);

    //递归后撤销选择
    permuteList.remove(permuteList.size() - 1);
    hasChoose[i] = 0;
    }

    }


    public static void main(String[] args) {

    new PermuteUnique().permuteUnique(new int[]{3,3,0,3});

    }




    }
  • 相关阅读:
    驱动编程:内存管理基本函数
    POOL_TYPE enumeration
    远程服务器下载jenkins上生成的war包,失败原因
    jenkins ssh 报错
    git分组
    免密登录
    jenkins 生成war包后的下载
    redis 连接失败
    nginx+tomcat+https
    jenkins 拉取 git 代码成功版本
  • 原文地址:https://www.cnblogs.com/ttaall/p/15724021.html
Copyright © 2011-2022 走看看