LeetCode47-全排列II-剪枝逻辑

news/2024/11/25 16:31:47/

参考链接:
🔗:卡尔的代码随想录:全排列II
在这里插入图片描述
这里第一层,used只有一个元素为1,代表只取出了1个元素作为排列,第二层used有两个元素为1,代表取出了2个元素作为排列,因为数组有序,所以重复的元素都是挨着的,因此可以使用如下语句去重.
其中visit[i-1]==False的话,就是代表了树层visit[i-1]使用过
其中visit[i-1]==True的话,就是代表了树枝visit[i-1]使用过

if(i>=1&&nums[i-1]==nums[i]&&!visit[i-1]){continue;
}

因为去重的逻辑是减去树层的重复项,因此当visit[i-1]==False的时候必须要跳过,也就是!visit[i-1]的时候要continue,不能是break,如果break了,下一个排列会被忽略掉了!

class Solution {public List<List<Integer>> permuteUnique(int[] nums) {List<List<Integer>> paths=new ArrayList<>();Deque<Integer> path=new ArrayDeque<>();Arrays.sort(nums);boolean[] visit = new boolean[nums.length+1];dfs(nums,paths,path,visit);return paths;}public void dfs(int[] nums,List<List<Integer>> paths,Deque<Integer> path,boolean[] visit){if(nums==null){return ;}if(path.size()==nums.length){paths.add(new ArrayList(path));return;}// int i=begin;int i=0;for(;i<nums.length;++i){if(i>=1&&nums[i-1]==nums[i]&&!visit[i-1]){continue;}if(!visit[i]){visit[i]=true;path.add(nums[i]);dfs(nums,paths,path,visit);if(!path.isEmpty())path.removeLast();visit[i]=false;}}}
}

http://www.ppmy.cn/news/1232139.html

相关文章

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—同济大学专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室&#xff0c;浓厚创新产学研氛围&#xff01; 教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01; 一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; &#x1f559;时间&#xff1a;…

git撤销某一次commit提交

一&#xff1a;撤销上一次commit提交&#xff0c;但不删除修改的代码 可以使用使用VSCode 二&#xff1a;使用 git reset --hard命令删除提交时&#xff0c;将会删除该提交及其之后的所有更改&#xff08;相当于你想要回滚到的提交的提交ID&#xff09; git reset --hard 版本…

Qt ListWidget

先创建QListWidgetItem&#xff1a; QListWidgetItem* pListItem1 new QListWidgetItem(QIcon(":/resources/editor.png"),u8"editor");QListWidgetItem* pListItem2 new QListWidgetItem(QIcon(":/resources/env.png"),u8"env");Q…

注意这“一前一后” 覆盖伦敦金价格形态的缺点

在伦敦金交易中&#xff0c;投资者除了应用技术指标和K线信号做交易以外&#xff0c;还会采取价格形态作为入场触发的信号。但在实际交易中&#xff0c;价格形态的灵敏程度比前面说的那两者要差一点&#xff0c;那我们要如何应用好价格形态作为触发信号呢&#xff1f;下面我们就…

ChainLight zkSync Era漏洞揭秘

1. 引言 ChainLight研究人员于2023年9月15日&#xff0c;发现了zkSync Era主网的ZK电路的一个soundness bug&#xff0c;并于2023年9月17日&#xff0c;向Matter Labs团队报告了该问题。Matter Labs团队修复了该问题&#xff0c;并奖励了ChainLight团队5万USDC——为首个zkSync…

Java高级编程-----网络编程

网络通信协议 通过计算机网络可以实现多台计算机连接&#xff0c;但是不同计算机的操作系统和硬件体系结构不同&#xff0c;为了提供通信支持&#xff0c;位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则&#xff0c;这就好比在道路中行驶的汽车一定要遵守交…

Python武器库开发-flask篇之session与cookie(二十六)

flask篇之session与cookie(二十六) 在 Flask 中&#xff0c;可以使用 session 来在不同请求之间存储和传递数据。Session 在客户端和服务器端之间交换&#xff0c;但是数据存储在服务器端。 Session 与 Cookie 的区别 session 和 cookie 都可以用来在不同请求之间存储和传递…

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测 目录 回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测&#xff08;…