news 2026/9/14 12:25:11

力扣 LeetCode 17. 电话号码的字母组合(Day12:回溯算法)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣 LeetCode 17. 电话号码的字母组合(Day12:回溯算法)

解题思路:

需要构想好回溯树的宽度和深度分别代表什么含义

宽度:abc或其他数字对应的字母排列(for循环使用)

深度:digits的长度(递归深度使用,index + 1)

注意:

终止条件是if (index == digits.length()),下标到了最后一个元素的后一个位置,最后一个元素已经处理完成

而不是if (index == digits.length()-1),下标到了最后一个元素的位置,最后一个元素还没有开始处理

StringBuffer的方法,删除最后一个元素用path.deleteCharAt(path.length() - 1);

这里的 i 是从0开始的,因为每次处理一个新的字母组,而之前的问题中,每次处理的是同一个nums数组,所以之前用start来防止选到前面的元素

class Solution { List<String> res = new ArrayList<>(); StringBuffer path = new StringBuffer(); String[] map = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" }; public List<String> letterCombinations(String digits) { if (digits.length() == 0) return res; backtracking(digits, 0); return res; } public void backtracking(String digits, int index) { if (index == digits.length()) { res.add(path.toString()); return; } int digit = digits.charAt(index) - '0'; String str = map[digit]; for (int i = 0; i < str.length(); i++) { path.append(str.charAt(i)); backtracking(digits, index + 1); path.deleteCharAt(path.length() - 1); } } }

将String数组改为Map也可以做,略微修改即可,方法如下:

class Solution { List<String> res = new ArrayList<>(); StringBuffer path = new StringBuffer(); Map<Character, String> map = new HashMap<Character, String>() { { put('2', "abc"); put('3', "def"); put('4', "ghi"); put('5', "jkl"); put('6', "mno"); put('7', "pqrs"); put('8', "tuv"); put('9', "wxyz"); } }; public List<String> letterCombinations(String digits) { if (digits.length() == 0) return res; backtracking(digits, 0); return res; } public void backtracking(String digits, int index) { if (index == digits.length()) { res.add(path.toString()); return; } char digit = digits.charAt(index); String str = map.get(digit); for (int i = 0; i < str.length(); i++) { path.append(str.charAt(i)); backtracking(digits, index + 1); path.deleteCharAt(path.length() - 1); } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 12:24:42

专科生应对AI依赖:10款降AI率工具与能力提升策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 12:21:38

2026年多模态应用实战:OpenCV为何仍是视觉大模型的核心基础设施

2. 开篇&#xff1a;为什么2026年做多模态应用&#xff0c;反而绕不开OpenCV过去两年我一直在折腾多模态和视觉大模型方向&#xff0c;从CLIP系列的图文对齐&#xff0c;到LLaVA这类视觉指令微调&#xff0c;再到各种检测分割多模态融合方案&#xff0c;踩过的坑能堆满一个书架…

作者头像 李华
网站建设 2026/9/14 12:20:06

SSM框架企业人事管理系统实战:数据建模、登录认证与考勤统计

简介&#xff1a;这是一套基于SSM框架与JavaWeb技术开发的企业人事管理系统毕业设计资料包&#xff0c;面向计算机专业学生及有课程设计、毕业设计需求的学习者。系统采用JSPMySQLTomcat技术栈&#xff0c;划分管理员、部门经理、员工三级角色&#xff0c;覆盖员工管理、考勤签…

作者头像 李华
网站建设 2026/9/14 12:18:58

多智能体动态任务分配:GCAA算法原理与Matlab实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 12:18:04

C#设备信息化管理系统开发:从Modbus通信到WinForms看板实战

简介&#xff1a;基于C#的设备信息化管理系统源码是一份企业级软件开发学习项目&#xff0c;面向C#开发者、设备管理从业者及对资产管理感兴趣的编程学习者。系统覆盖资产管理、设备维修保养、备件管理、文件管理和可视化仪表盘等核心模块&#xff0c;能帮助读者理解从设备台账…

作者头像 李华