leetcode hot100 17. 电话号码的字母组合 medium 递归回溯

每一层选择"当前数字"对应的一个字母。

python 复制代码
phone = {
    "2": "abc",
    "3": "def",
    "4": "ghi",
    "5": "jkl",
    "6": "mno",
    "7": "pqrs",
    "8": "tuv",
    "9": "wxyz"
}

切片回溯

python 复制代码
class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:
            return []

        phone = {
            "2": "abc", "3": "def",
            "4": "ghi", "5": "jkl",
            "6": "mno", "7": "pqrs",
            "8": "tuv", "9": "wxyz"
        }

        res = []

        def backtrack(digits, tmp):  #(待选列表,已有排列)
        	 #待选列表为空(所有数字有选完了)
            if not digits:
                res.append(tmp)  # 当前排列加入res
                return 

            letters = phone[digits[0]]   # 待选列表的第一个数字,对应的phone字母
            for ch in letters:
                # 递归,继续选下一个digits数字
                backtrack(digits[1:], tmp + ch)

    
        backtrack(digits, "")
        return res

时间复杂度:O(3ⁿ × n)

每个数字平均对应 3 个字母,字符串长度 n

空间复杂度:

切片写法每层都会创建新字符串:O(n^2)

相关推荐
李昊哲小课5 小时前
Python 线性数据结构详解
开发语言·数据结构·python
新诺韦尔API5 小时前
身份证验证接口详细开发对接指南
大数据·python·api
WangYaolove13145 小时前
基于python的多媒体资料管理系统(源码+文档)
python·mysql·django·毕业设计·源码
李昊哲小课5 小时前
Python 数据结构示例
开发语言·数据结构·python
Qeesun5 小时前
UV 环境管理指南 / 如何将旧项目接入 UV
linux·python·uv
MoRanzhi12035 小时前
Pillow 图像分割、切片与拼接处理
图像处理·人工智能·python·计算机视觉·pillow·图像拼接·网格分块
Ulyanov5 小时前
基于Celery的分布式雷达电子战仿真系统:架构设计与实战指南
分布式·python·队列处理·雷达电子战仿真
溪海莘5 小时前
如何使用uv创建并管理一个新的空白的python项目?
开发语言·python·uv
曲辕RPA5 小时前
RPA多网页并行自动化深度对比:影刀的坑与曲辕的解法
python·ai·自动化·rpa
爱打代码的小林5 小时前
用 LangChain 解析大模型输出
java·python·langchain·大模型