当前位置: 首页 > news >正文

打开转盘锁 -- BFS

打开转盘锁
这里提供两种实现,单向BFS和双向BFS。


class OpenLock:"""752. 打开转盘锁https://leetcode.cn/problems/open-the-lock/"""def solution(self, deadends: List[str], target: str) -> int:"""单向BFS:param deadends: :param target: :return: """visited = set()# 将deadends初始化到visited数组中for deadend in deadends:visited.add(deadend)queue = []step = 0queue.append('0000')visited.add('0000')while queue:sz = len(queue)for i in range(sz):cur = queue.pop(0)if cur == target:return stepif cur in visited:continuevisited.add(cur)for j in range(4):up = self.plusOne(cur, j)if up not in visited:queue.append(up)down = self.minusOne(cur, j)if down not in visited:queue.append(down)step += 1return -1def plusOne(self, cur, j):if cur[j] == '9':return cur[:j] + '0' + cur[j+1:]else:return cur[:j] + str(int(cur[j])+1) + cur[j+1:]def minusOne(self, cur, j):if cur[j] == '0':return cur[:j] + '9' + cur[j + 1:]else:return cur[:j] + str(int(cur[j]) - 1) + cur[j + 1:]def solution2(self, deadends: List[str], target: str) -> int:"""双向BFS优化:param deadends: :param target: :return: """deads = set()visited = set()# 将deadends初始化到visited数组中for deadend in deadends:deads.add(deadend)q1 = set()q2 = set()q1.add('0000')q2.add(target)step = 0while q1 and q2:# 额外优化if len(q1) > len(q2):tmp = q1q1 = q2q2 = tmptemp = set()for cur in q1:if cur in deads:continueif cur in q2:return stepvisited.add(cur)for j in range(4):up = self.plusOne(cur, j)if up not in visited:temp.add(up)down = self.minusOne(cur, j)if down not in visited:temp.add(down)step += 1# 这里temp相当于q1,交换q1和q2q1 = q2q2 = tempreturn -1
http://www.lryc.cn/news/159700.html

相关文章:

  • 国标EHOME视频平台EasyCVR视频融合平台助力地下停车场安全
  • 【业务功能篇96】微服务-springcloud-springboot-认证服务-登录注册功能-Auth2.0-分布式session
  • 自造简易版音频进度条
  • 433MHz芯片在遥控应用市场中的优点
  • 基于Bert+Attention+LSTM智能校园知识图谱问答推荐系统——NLP自然语言处理算法应用(含Python全部工程源码及训练模型)+数据集
  • 慕尼黑主题活动!亚马逊云科技生成式AI全新解决方案,引领未来移动出行领域
  • android 离线语言合成(文字转语音)
  • 使用Fastchat部署vicuna大模型
  • 【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现
  • 华为云云耀云服务器L实例评测|华为云云耀云服务器L实例评测使用
  • 【DS思想+堆贪心】CF595div3 D2
  • 2023-09-08 LeetCode每日一题(计算列车到站时间)
  • 软考-高级-信息系统项目管理第四版(完整24章全笔记)
  • 华为Mate 60和iPhone 15选哪个?
  • 嵌入式Linux驱动开发(同步与互斥专题)(二)
  • Docker安装部署Nexus3作为内网镜像代理缓存容器镜像
  • SpringBoot工具库:解决SpringBoot2.*版本跨域问题
  • docker安装开发常用软件MySQL,Redis,rabbitMQ
  • C# Unity FSM 状态机
  • pytorch搭建squeezenet网络的整套工程,及其转tensorrt进行cuda加速
  • 【精读Uboot】SPL阶段的board_init_r详细分析
  • canvas绘制渐变色三角形金字塔
  • 企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
  • Debain JDK8 安装
  • Python序列操作指南:列表、字符串和元组的基本用法和操作
  • 【已更新代码图表】2023数学建模国赛E题python代码--黄河水沙监测数据分析
  • 【前端】CSS-Grid网格布局
  • 计算机竞赛 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别
  • 2023-9-8 求组合数(二)
  • k8s service的一些特性