Leetcode全排序-剪枝算法

编号47. 全排列2 剪枝

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

示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

public static void main(String[] args) {int[] nums={1,2,1};System.out.println(permuteUnique(nums));}public static List<List<Integer>> permuteUnique(int[] nums) {Arrays.sort(nums);//不管什么数组都要先进行排序,好判断List<List<Integer>> list=new ArrayList<>();List<Integer> path=new ArrayList<>();boolean[] used = new boolean[nums.length];dfs(nums,list,path,used);return list;}private static void dfs(int[] nums, List<List<Integer>> list, List<Integer> path, boolean[] used) {if (path.size()==nums.length){list.add(new ArrayList<>(path));return;}
// 剪枝条件:i > 0 是为了保证 nums[i - 1] 有意义
//nums[i] == nums[i-1] 判断是不是重复的点,这也是排序是剪枝的前提的原因
// 写 !used[i - 1] 是因为 nums[i - 1] 在深度优先遍历的过程中刚刚被撤销选择,也就是重置为false。for (int i = 0; i < nums.length; i++) {if (used[i]==true)continue;if (i>0&&nums[i]==nums[i-1]&&used[i-1]==false)continue;used[i]=true;path.add(nums[i]);dfs(nums,list,path,used);path.remove(path.size()-1);used[i]=false;}}

46.全排列

和47差不多,47只是46的一种特殊情况

   public static List<List<Integer>> permute(int[] nums) {List<List<Integer>> list=new ArrayList<List<Integer>>();if (nums.length==0)return list;List<Integer> path=new ArrayList<>();boolean[] used=new boolean[nums.length];dfs(list,nums,path,used);return list;}static void dfs(List<List<Integer>> list,int[] nums, List<Integer> path, boolean[] used) {if (path.size()==nums.length){list.add(new ArrayList<Integer>(path));return;}for (int i = 0; i < nums.length; i++) {if (used[i]==true)continue;used[i]=true;path.add(nums[i]);dfs(list,nums,path,used);System.out.println(path.size()-1);path.remove(path.size()-1);used[i]=false;}}

Leetcode全排序-剪枝算法相关推荐

  1. Python实现博弈树minmax补全与α-β剪枝算法脚本简介

    文章目录 前言 一.题目 二.使用步骤 1.递归构建博弈树 2.α-β剪枝算法 3.博弈树可视化 4.测试实例 5.结果展示 6.全部代码 总结 前言 使用Python编程实现博弈树的构建,实现利用M ...

  2. 链表排序---迭代版本归并算法 + [leetcode]148. 排序链表

    前言: 对于链表来说,排序首选应该是归并算法 维基百科上有归并算法的迭代版本和递归版本 基于数组实现的. https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B ...

  3. 经典剪枝算法的例题——Sticks详细注释版

    这题听说是道十分经典的剪枝算的题目,不要问我剪枝是什么,我也不知道,反正我只知道用到了深度搜索 我参考了好多资料才悟懂,然后我发现网上的那些大神原理讲的很明白,但代码没多少注释,看的很懵X,于是我抄起 ...

  4. java递归实现数组逆序_Java实现数组全排序(递归)

    冒泡排序 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 冒泡排序算法的运作如下:(从后往 ...

  5. 收藏 | 一文总结70篇论文,帮你透彻理解神经网络的剪枝算法

    来源:DeepHub IMBA本文约9500字,建议阅读10+分钟 本文为你详细介绍神经网络剪枝结构.剪枝标准和剪枝方法. 无论是在计算机视觉.自然语言处理还是图像生成方面,深度神经网络目前表现出来的 ...

  6. python_pygame_alpha-beta剪枝算法_玩中国象棋

    本文主要内容:python Pygame alpha-beta剪枝算法 玩中国象棋 相当于入门水平,我还是能下赢它 完整简洁并有详细注释的代码: python Pygame alpha-beta剪枝算 ...

  7. 我总结了70篇论文的方法,帮你透彻理解神经网络的剪枝算法

    无论是在计算机视觉.自然语言处理还是图像生成方面,深度神经网络目前表现出来的性能都是最先进的.然而,它们在计算能力.内存或能源消耗方面的成本可能令人望而却步,这使得大部份公司的因为有限的硬件资源而完全 ...

  8. Alpha-Beta剪枝算法在直棋中的运用

    游戏说明 详见本人的项目描述页面:https://gitee.com/liuweilhy/NineChess/blob/master/Readme.md 我做了个简单的GUI如下图. 点击这里可以下载 ...

  9. 四国军棋引擎开发(6)alpha-beta剪枝算法

    在讲alpha-beta剪枝算法之前先要了解最大最小算法,在棋类游戏中,给每一个局面打一个分数,轮到自己下时会选择有利于自己的下法,即选择局面分数高的,而对手会选择更加不利于自己的局面,即分数最低的. ...

最新文章

  1. sqlite命令行查看数据显示列头、java访问sqlite、java命令指定classpath
  2. Can not create a Path from an empty string解决
  3. java spliterator_java 8 stream中的Spliterator简介
  4. 【干货】--基于Python的文本情感分类
  5. 数据结构之单链表的整表创建头插法
  6. REHL5 mail不能自动外发邮件
  7. Swift和Object-C的区别和优缺点
  8. 【转】电子毕业设计题目
  9. 执行时遇到 For apos;context.set_contextapos;, package type xxx support apos;devic
  10. 根目录磁盘空间不足,使用fdisk添加新磁盘问题
  11. Presto(4)presto客户端查询保存成文件
  12. 如何使用unity制作萌萌的live2d桌宠
  13. oracle bpm难点,Oracle Bpm 11g 审批性能优化
  14. 普通上班族搞什么副业能赚钱?
  15. 我们国家进5年攻防比赛情况汇总
  16. uniAPP开发 全教程
  17. 计算机平板传输软件,“在iPad和计算机之间无线传输文件的方法”
  18. python | 时间序列折线图
  19. 深入浅出对话系统——拥抱笑脸Transformer库的使用
  20. 解决集群中MATLAB无法启动并行池的问题

热门文章

  1. 纹理、贴图、材质的区别
  2. MySQL日期格式化(format)-%Y-%m-%d %H:%i:%S
  3. Monotonic Matrix 牛客
  4. 黑莓z10 android,重生还是毁灭——黑莓Z10使用评测
  5. 第九节 使用设备树实现RGB 灯驱动
  6. Yolov5添加注意力机制
  7. 使用 GitHub Actions 在 EKS 上部署 InterSystems IRIS 解决方案
  8. Ubuntu服务器迁移WordPress
  9. c学前儿童语言教育试卷,学前儿童语言教育试题2015
  10. 百知教育-胡鑫喆讲师-java-第一章06