2020.10.31 leetcode周赛总结
这是我第二次打周赛了,还是两道题gg,但是进步不少了,第三道题有非常明确的思路而且已经写出来了,只是有一个越界点没过最后没时间了,中途上了个厕所点了个外卖浪费了不少时间调试。相信一个半小时拉满是能解出来三道题的。另外这里第三道题因为不审题浪费了许多时间,特此总结
2059. 转化数字的最小运算数
https://leetcode-cn.com/problems/minimum-operations-to-convert-number/
这道题显然是搜索了,但是怎么去避免指数爆炸?看清楚条件就显得非常非常重要了!
一定要看清楚条件! num的范围只有0~1000!暗示你这道题的关键是记录好每一次的结果,不要重复操作!最多只需要对数操作1000次,根本不会指数爆炸!题目每一个在一定范围内的条件一定不可能是白给的,这种条件一定是有深意的,暗示你往某个方向去想!
我的思路是从goal开始反向操作,尝试操作回start
建立一个HashSet记录将要操作的数,TotalSet记录所有操作过的数,把goal放进去
清空操作数set
遍历将要操作的数,算出加,减,异或三个结果,判断这三个结果是否被操作过,如果没被操作过则放入Set中
不停循环,直到没有新数再加入Set
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | class Solution { boolean range(Long num) { return num >= 0 && num <= 1000 ; } public int minimumOperations( int [] nums, int start, int goal) { int [] record = new int [ 1000 ]; Set<Long> totalSet = new HashSet<>(); Set<Long> nextSet = new HashSet<>(); // nextSet记录每次循环需要操作的数 nextSet.add(( long )goal); // totalSet记录操作过的数 totalSet.add(( long )goal); int count = 0 ; while ( true ) { count++; boolean newPut = false ; Set<Long> tempSet = new HashSet<>(); // 遍历将要操作的数进行操作,将数放入下一次要操作的数的Set中 for ( long num : nextSet) { for ( int i = 0 ; i < nums.length; i++) { //进行三种操作 long res1 = num + nums[i]; long res2 = num - nums[i]; long res3 = num ^ nums[i]; if (res1 == start) { return count; } if (res2 == start) { return count; } if (res3 == start) { return count; } // 如果在范围内且没有被操作过,则放入集合 if (range(res1) && !totalSet.contains(res1)) { newPut = true ; tempSet.add(res1); totalSet.add(res1); } if (range(res2) && !totalSet.contains(res2)) { newPut = true ; tempSet.add(res2); totalSet.add(res2); } if (range(res3) && !totalSet.contains(res3)) { newPut = true ; tempSet.add(res3); totalSet.add(res3); } } } // 没有新数加入了,说明无法转换成start if (!newPut) { return - 1 ; } nextSet = tempSet; } } } |
__EOF__

本文作者:秋雨清笛
本文链接:https://www.cnblogs.com/PanYuDi/p/15493538.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/PanYuDi/p/15493538.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY