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

【力扣100】17.电话号码的字母组合

添加链接描述

class Solution:def letterCombinations(self, digits: str) -> List[str]:# 思路是使用回溯算法if not digits:return []phone = {'2':['a','b','c'],'3':['d','e','f'],'4':['g','h','i'],'5':['j','k','l'],'6':['m','n','o'],'7':['p','q','r','s'],'8':['t','u','v'],'9':['w','x','y','z']}def backtrack(con,dig):# 收获if len(dig)==0:res.append(con)else:for letter in phone[dig[0]]:backtrack(con+letter,dig[1:])res=[]backtrack('',digits)return res

思路:

  1. 定义一个回溯函数,其中con参数是用来储存每一个路径值,最后就是叶子节点指向的值,dig是题目给的数组,这个数组会越来越小
  2. dig数组越来越小,知道变成0,然后进行收获叶子节点

使用队列的解法

class Solution:def letterCombinations(self, digits: str) -> List[str]:if not digits: return []phone = ['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']queue = ['']  # 初始化队列for digit in digits:for _ in range(len(queue)):tmp = queue.pop(0)for letter in phone[ord(digit)-50]:# 这里我们不使用 int() 转换字符串,使用ASCII码queue.append(tmp + letter)return queue

解决的一个疑惑

queue=[0,1,2,3]
for i in range(len(queue)):print(i)queue.append(4)print(queue)

Q:这里因为queue的长度在不断改变,难么i的值也会无限增大下去吗?
A:不会,在这段代码中,虽然 queue 的长度在循环中不断增加,但 range(len(queue)) 在循环开始时就已经确定了。它是根据循环开始前 queue 的长度计算出来的,因此即使在循环过程中 queue 的长度增加了,range(len(queue)) 的值并不会随之改变。

当循环开始时,range(len(queue)) 会生成一个范围,它是根据 queue 的初始长度计算的,并且这个范围不会在循环执行过程中动态地更新。因此,即使在循环内部你不断地向 queue 中添加元素,for i in range(len(queue)) 仍然只会循环 queue 初始时的长度次数。

换句话说,range(len(queue)) 是在循环开始前计算的,所以循环次数在进入循环时就已经确定了,而不会受到循环内 queue 长度变化的影响。

0
[0, 1, 2, 3, 4]
1
[0, 1, 2, 3, 4, 4]
2
[0, 1, 2, 3, 4, 4, 4]
3
[0, 1, 2, 3, 4, 4, 4, 4]
http://www.lryc.cn/news/271356.html

相关文章:

  • 2023。
  • 出现 Cause: java.sql.SQLException: Field ‘id‘ doesn‘t have a default value解决方法
  • Linux--批量自动装机
  • 病理HE学习贴(自备)
  • 关于协同过滤算法在物联网的应用-基于用户行为数据和物联网设备数据,以此提供个性化的智能家居控制推荐服务
  • 计算机网络(6):应用层
  • ESP32:整合存储配网信息和MQTT笔记
  • nginx源码分析-4
  • 【Unity美术】Unity工程师对3D模型需要达到的了解【二】
  • 《微信小程序开发从入门到实战》学习六十九
  • 2022年全球软件质量效能大会(QECon北京站2022)-核心PPT资料下载
  • ILI9481 TFT3.5寸屏STM32F446ZEXX FMC驱动方式详解
  • 010、切片
  • 【华为数据之道学习笔记】8-6 质量改进
  • python多环境管理工具——pyenv-win安装与使用教程
  • Excel报表框架(ExcelReport)极简化解决复杂报表导出问题
  • 常用设计模式全面总结版(JavaKotlin)
  • Docker自建私人云盘系统
  • python replace()方法 指定替换指定字段
  • 【仅供测试】
  • C#/WPF JSON序列化和反序列化
  • Java——ArraryList线程不安全
  • 基于Java SSM框架实现健康管理系统项目【项目源码】
  • PostgreSQL16.1(Windows版本)
  • 使用nodejs对接arXiv文献API
  • mac 安装pyaudio
  • k8s学习 — 各章节重要知识点
  • go slice源码探索(切片、copy、扩容)和go编译源码分析
  • 电影“AI化”已成定局,华为、小米转战入局又将带来什么?
  • 小程序for循环中key值的作用?