备战秋招day7

很高兴又坚持了7天。

算法(回溯)

77. 组合

class Solution {List<Integer> list = new LinkedList<>();List<List<Integer>> llist = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {back(n,k,1);return llist;}public void back(int n,int k,int index){if(list.size() == k){llist.add(new LinkedList<>(list));return;}//剪枝优化:举个例子,当n=k的时候,很明显路只有一条,因此后面的都无需再遍历//剪枝从什么角度入手去考虑呢?for(int i = index;i<=(n - (k-list.size()) + 1);i++){list.add(i);back(n,k,i+1);list.remove(list.size()-1);}}
}

216. 组合总和 III

class Solution {List<List<Integer>> res;List<Integer> list;public List<List<Integer>> combinationSum3(int k, int n) {res = new ArrayList<>();list = new ArrayList<>();back(k,n,1,0);return res;}public void back(int k,int n,int index,int sum){//剪枝if(sum > n){return;}//终止条件if(list.size() == k){if(sum == n){res.add(new ArrayList<>(list));}return;}//剪枝:如果当前和已经大于目标值,很显然没必要继续遍历for(int i = index;i<=9;i++){if(sum+i > n){continue;}sum+=i;list.add(i);back(k,n,i+1,sum);sum-=i;list.remove(list.size()-1);}}
}

17. 电话号码的字母组合

class Solution {//设置全局列表存储最后的结果List<String> list = new ArrayList<>();String[] num = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};public List<String> letterCombinations(String digits) {if(digits.equals("") || digits == null) return list;back(digits,0);return list;}StringBuilder tmp = new StringBuilder();public void back(String digits,int index){//终止条件if(index == digits.length()){list.add(tmp.toString());return;}//通过index找到当前按下的键String now = num[digits.charAt(index)-'0'];//遍历可能的组合for(int i = 0;i<now.length();i++){tmp.append(now.charAt(i));back(digits,index+1);tmp.deleteCharAt(tmp.length()-1);}}
}

39. 组合总和

class Solution {List<List<Integer>> res;//大结果集List<Integer> list;//小结果集public List<List<Integer>> combinationSum(int[] candidates, int target) {res = new ArrayList<>();list = new ArrayList<>();//排序Arrays.sort(candidates);back(candidates,target,0,0);return res;}public void back(int[] candidates,int tar,int idx,int sum){if(sum == tar){res.add(new ArrayList<>(list));return;}for(int i = idx;i<candidates.length;i++){if(sum + candidates[i] > tar){continue;}sum+=candidates[i];list.add(candidates[i]);back(candidates,tar,i,sum);list.remove(list.size()-1);sum-=candidates[i];}}}

40. 组合总和 II

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> list = new ArrayList<>();//利用一个数组来记录某数字是否被使用过boolean[] used;public List<List<Integer>> combinationSum2(int[] candidates, int target) {used = new boolean[candidates.length];Arrays.sort(candidates);Arrays.fill(used,false);back(candidates,target,0,0);return res;}public void back(int[] candidates, int target,int sum,int idx){if(sum == target){res.add(new LinkedList<>(list));return;}for(int i = idx;i<candidates.length;i++){//剪枝if(sum + candidates[i] > target) continue;//当前位和前一位相同的情况下,如果前一位已经为false,说明已经被选择过了,跳过if(i>0 && candidates[i]==candidates[i-1] && used[i-1] == false){continue;}sum+=candidates[i];list.add(candidates[i]);used[i] = true;back(candidates,target,sum,i+1);used[i] = false;list.remove(list.size()-1);sum-=candidates[i];}}
}

131. 分割回文串

class Solution {List<List<String>> res = new ArrayList<>();List<String> list;public List<List<String>> partition(String s) {list = new ArrayList<>();back(s,0);return res;}public void back(String s,int idx){//如果idx到/超过了s的长度说明已经可以加入集合了if(idx >= s.length()){res.add(new ArrayList<>(list));return;}for(int i = idx;i<s.length();i++){if(isValid(idx,i,s)){//当前区间是回文串String tmp = s.substring(idx,i+1);list.add(tmp);back(s,i+1);list.remove(list.size()-1);}else{continue;}}}//判断是否为回文串public boolean isValid(int start,int end,String s){while(start<end){if(s.charAt(start) != s.charAt(end)) return false;start++;end--;}return true;}
}

思考

剪枝从什么角度去入手呢?

剩余的数量是否足够我去凑成结果集

剩余的数量还有没有必要让我继续去跑下一轮来选择?


补充知识点

今天无知识点的补充,明天出发去北京啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精品UI知识付费系统源码网站EyouCMS模版源码

这是一款知识付费平台模板&#xff0c;后台可上传本地视频&#xff0c;批量上传视频连接&#xff0c; 视频后台可设计权限观看&#xff0c;免费试看时间时长&#xff0c;会员等级观看&#xff0c;付费观看等功能&#xff0c; 也带软件app权限下载&#xff0c;帮助知识教育和软件…

制造企业的仓库管理如何做好数据分析?

在竞争激烈的现代制造业环境中&#xff0c;仓库管理成为许多生产制造企业面临的一大挑战。随着产品种类的不断增加和客户需求的日一个型号&#xff0c;仓库不仅要处理物料、半成品和成品&#xff0c;还要应对产品更新换代、不同项目客户的特殊需求等复杂因素。面对这些挑战&…

《Windows API每日一练》7.1 计时器基础知识

计时器&#xff08;Timer&#xff09;是一种在编程中用于测量时间间隔的机制。它允许程序在指定的时间间隔内执行特定的操作或触发事件。 本节必须掌握的知识点&#xff1a; 计时器 7.1.1 计时器 我们可以调用SetTimer函数为自己的Windows程序分配一个计时器。SetTimer包含一…

pygame在mobaxterm上无法显示屏幕

在mobaxterm上的linux系统&#xff08;这里测试的是ubuntu系统&#xff09;上运行pygame时&#xff0c;在运行代码 pygame.display.init()展示窗口时会显示pygame.error: windows not available的错误。 这是因为linux下的窗口展示配置与windows不同&#xff0c;windows下按 …

C++实现简化版Qt信号槽机制(2):增加内存安全保障

在上一篇文章中《C实现一个简单的Qt信号槽机制》&#xff0c;我们基于前面的反射代码实现了信号槽的功能。 但是上一篇的代码中没有对象生命周期管理的机制&#xff0c;如果在对象的生命周期结束后还存在未断开的信号和槽连接&#xff0c;那么信号触发时可能会尝试访问已经被析…

ValidateAntiForgeryToken、AntiForgeryToken 防止CSRF(跨网站请求伪造)

用途&#xff1a;防止CSRF&#xff08;跨网站请求伪造&#xff09;。 用法&#xff1a;在View->Form表单中: aspx&#xff1a;<%:Html.AntiForgeryToken()%> razor&#xff1a;Html.AntiForgeryToken() 在Controller->Action动作上&#xff1a;[ValidateAntiForge…

Java的IO体系

目录 1、Java的IO体系2、IO的常用方法3、Java中为什么要分为字节流和字符流4、File和RandomAccessFile5、Java对象的序列化和反序列化6、缓冲流7、Java 的IO流中涉及哪些设计模式 1、Java的IO体系 IO 即为 input 输入 和 output输出 Java的IO体系主要分为字节流和字符流两大类…

java对word文档转图片,转PDF

话不多说&#xff0c;直接入题 先引包 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-words</artifactId><version>23.1</version></dependency> word文档转图片 import com.aspose.words.Document; impor…

防爆配电箱航空插头正确安装

防爆配电箱航空插头的安装确实有特殊要求&#xff0c;这些要求旨在确保配电箱在潜在危险环境中的安全运行。以下是一些关键的安装要求&#xff1a; 安装环境&#xff1a;防爆配电箱应安装在危险区域之外的安全地点&#xff0c;远离潜在的爆炸源和危险物质。安装环境应保持干燥、…

springboot使用feign调用不依赖cloud

在使用spring boot调用第三方api中&#xff0c;常用的是okhttp、apache http client等&#xff0c;但是直接使用下来还是有点繁琐&#xff0c;需要手动转换实体。 在springcloud中有个openfeign调用&#xff0c;第一次体验到调用接口还能这么丝滑。注解写道接口上&#xff0c;…

17859划分准则小结

17859《划分准则》 发布时间&#xff1a;1999.9.13 实施时间&#xff1a;2001.1.1 计算机信息系统安全保护能力的五个等级&#xff1a; 第一级&#xff1a;用户自主保护级 第二级…

数据结构简介

在容器的基础之上&#xff0c;java引入了数据结构的概念。数据结构可以简单地理解成是一个以特定的布局方式来存储数据的容器。但是我个人觉得这种理解方式不太合理&#xff0c;根据我们学的数据结构的内容&#xff0c;我更倾向于数据结构是数据在容器中的布局方式&#xff0c;…

rtthread stm32h743的使用(十一)spi设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.编译下载&#xff0c;可以看到串口打印正常 3.…

Python商务数据分析知识专栏(一)——Python编程基础

Python商务数据分析知识专栏&#xff08;一&#xff09;——Python编程基础 一、认识python二、编写python程序三、认识python数据结构四、条件判断及分支语句五、使用def定义函数六、认识面向对象七、读取文件数据八、模块和第三方库专栏一&#xff08;Python基础&#xff09;…

c++ 解决区间最大数和矩阵最大面积

给定一个实数序列&#xff0c;设计一个最有效的算法&#xff0c;找到一个总和数最大的区间等于某个事先给定的数字。 我们可以使用前缀和和哈希表来设计一个高效的算法。这个算法的时间复杂度是 O(n)&#xff0c;空间复杂度也是 O(n)。 #include <vector> #include <…

python查找支撑数 青少年编程电子学会python编程等级考试三级真题解析2022年3月

目录 python查找支撑数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python查找支撑数 2022年3月 python编程等级考试级编程题 一、题目要求…

RabbitMQ 的经典问题

文章目录 前言一、防止消息丢失1.1 ConfirmCallback/ReturnCallback1.2 持久化1.3 消费者确认消息 二、防止重复消费三、处理消息堆积四、有序消费消息五、实现延时队列六、小结推荐阅读 前言 当设计和运维消息队列系统时&#xff0c;如 RabbitMQ&#xff0c;有几个关键问题需…

第100+13步 ChatGPT学习:R实现决策树分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现决策树分类 &#xff08;…

【漏洞复现】宏景HCM人力资源信息管理系统——任意文件读取漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 宏景HCM人力资源信息管理系统是一款全面覆盖人力资源管理各模块…

docker pull 镜像的时候遇到Pulling fs layer问题

最近遇到一个很奇怪的问题,docker pull 镜像的时候,总是出现Pulling fs layer问题,导致镜像拉取不成功,以前是安装好docker,正常拉取镜像都是没什么问题的,在这里记录一下这个问题的解决方法,当然,可能并不通用。 1、进入阿里云容器服务 地址:https://cr.console.aliy…