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)

相关推荐
迷迭香yy4 分钟前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
李昊哲小课3 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
2401_844582955 小时前
工具包:软件架构设计的实用技巧与经验分享
python
RFID固定资产管理系统5 小时前
适配媒体行业的固定资产管理软件有哪些功能与核心优势
大数据·人工智能·python·媒体
SunnyDays10115 小时前
Python 为 PowerPoint 添加动画:进入、退出、动作路径与文本动画(详解)
python·powerpoint·动画·动画效果·文本动画
难以怀瑾7 小时前
pytest.param`与 allure.dynamic.title()全解析
python
月光船幽幽8 小时前
Pytest配置实战:高效管理测试标记与覆盖
python·科技
leoZ2318 小时前
实战复盘:用 Claude Code 从零搭一个 GitHub PR 统计工具
java·人工智能·python·深度学习·自然语言处理·github·llama
夏天测9 小时前
Python 网络编程入门:从 Socket 底层到 HTTP 并发实战
python·socket·httpx·requests·tcp udp·python网络编程·爬虫基础
玉鸯9 小时前
多 Agent 并行时如何保证状态一致性?
分布式·python·agent