Leetcode全排序-剪枝算法
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全排序-剪枝算法相关推荐
- Python实现博弈树minmax补全与α-β剪枝算法脚本简介
文章目录 前言 一.题目 二.使用步骤 1.递归构建博弈树 2.α-β剪枝算法 3.博弈树可视化 4.测试实例 5.结果展示 6.全部代码 总结 前言 使用Python编程实现博弈树的构建,实现利用M ...
- 链表排序---迭代版本归并算法 + [leetcode]148. 排序链表
前言: 对于链表来说,排序首选应该是归并算法 维基百科上有归并算法的迭代版本和递归版本 基于数组实现的. https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B ...
- 经典剪枝算法的例题——Sticks详细注释版
这题听说是道十分经典的剪枝算的题目,不要问我剪枝是什么,我也不知道,反正我只知道用到了深度搜索 我参考了好多资料才悟懂,然后我发现网上的那些大神原理讲的很明白,但代码没多少注释,看的很懵X,于是我抄起 ...
- java递归实现数组逆序_Java实现数组全排序(递归)
冒泡排序 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 冒泡排序算法的运作如下:(从后往 ...
- 收藏 | 一文总结70篇论文,帮你透彻理解神经网络的剪枝算法
来源:DeepHub IMBA本文约9500字,建议阅读10+分钟 本文为你详细介绍神经网络剪枝结构.剪枝标准和剪枝方法. 无论是在计算机视觉.自然语言处理还是图像生成方面,深度神经网络目前表现出来的 ...
- python_pygame_alpha-beta剪枝算法_玩中国象棋
本文主要内容:python Pygame alpha-beta剪枝算法 玩中国象棋 相当于入门水平,我还是能下赢它 完整简洁并有详细注释的代码: python Pygame alpha-beta剪枝算 ...
- 我总结了70篇论文的方法,帮你透彻理解神经网络的剪枝算法
无论是在计算机视觉.自然语言处理还是图像生成方面,深度神经网络目前表现出来的性能都是最先进的.然而,它们在计算能力.内存或能源消耗方面的成本可能令人望而却步,这使得大部份公司的因为有限的硬件资源而完全 ...
- Alpha-Beta剪枝算法在直棋中的运用
游戏说明 详见本人的项目描述页面:https://gitee.com/liuweilhy/NineChess/blob/master/Readme.md 我做了个简单的GUI如下图. 点击这里可以下载 ...
- 四国军棋引擎开发(6)alpha-beta剪枝算法
在讲alpha-beta剪枝算法之前先要了解最大最小算法,在棋类游戏中,给每一个局面打一个分数,轮到自己下时会选择有利于自己的下法,即选择局面分数高的,而对手会选择更加不利于自己的局面,即分数最低的. ...
最新文章
- sqlite命令行查看数据显示列头、java访问sqlite、java命令指定classpath
- Can not create a Path from an empty string解决
- java spliterator_java 8 stream中的Spliterator简介
- 【干货】--基于Python的文本情感分类
- 数据结构之单链表的整表创建头插法
- REHL5 mail不能自动外发邮件
- Swift和Object-C的区别和优缺点
- 【转】电子毕业设计题目
- 执行时遇到 For apos;context.set_contextapos;, package type xxx support apos;devic
- 根目录磁盘空间不足,使用fdisk添加新磁盘问题
- Presto(4)presto客户端查询保存成文件
- 如何使用unity制作萌萌的live2d桌宠
- oracle bpm难点,Oracle Bpm 11g 审批性能优化
- 普通上班族搞什么副业能赚钱?
- 我们国家进5年攻防比赛情况汇总
- uniAPP开发 全教程
- 计算机平板传输软件,“在iPad和计算机之间无线传输文件的方法”
- python | 时间序列折线图
- 深入浅出对话系统——拥抱笑脸Transformer库的使用
- 解决集群中MATLAB无法启动并行池的问题
热门文章
- 纹理、贴图、材质的区别
- MySQL日期格式化(format)-%Y-%m-%d %H:%i:%S
- Monotonic Matrix 牛客
- 黑莓z10 android,重生还是毁灭——黑莓Z10使用评测
- 第九节 使用设备树实现RGB 灯驱动
- Yolov5添加注意力机制
- 使用 GitHub Actions 在 EKS 上部署 InterSystems IRIS 解决方案
- Ubuntu服务器迁移WordPress
- c学前儿童语言教育试卷,学前儿童语言教育试题2015
- 百知教育-胡鑫喆讲师-java-第一章06