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

2025年- H70-Lc178--17.电话号码的组合(回溯,组合)--Java版

1.题目描述

在这里插入图片描述

2.思路

在这里插入图片描述

(1)组合不强调元素的顺序,所以[1,2,6]和[2,6,1]代表同一个数。
(2)排列强调元素之间的顺序,所以[1,2,6]和[2,6,1]代表不同的数。
(3)回溯通过递归的方式实现每一层的for循环,回溯算法可以抽象为树形结构。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.代码实现

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import static jdk.nashorn.internal.objects.NativeString.charAt;public class H17 {public List<String> letterCombinations(String digits) {List<String> res = new ArrayList<>();if (digits.length() == 0) {return res;}Map<Character, String> m1 = new HashMap<>();m1.put('1', " ");m1.put('2', "abc");m1.put('3', "def");m1.put('4', "ghi");m1.put('5', "jkl");m1.put('6', "mno");m1.put('7', "pqrs");m1.put('8', "tuv");m1.put('9', "wxyz");StringBuffer sb=new StringBuffer();backtracking(res,m1,digits,0,sb);return  res;}public void backtracking(List<String>res,Map<Character, String> m1,String digits,int index,StringBuffer cur){//确定递归的终止条件if(index==digits.length()) {res.add(cur.toString());// 将当前组合添加到结果列表中return ;}//获取输入的数字组合的单个数字char digit=digits.charAt(index);// 获取当前数字对应的字母字符串String letter=m1.get(digit);//获取数字所对应的字符串的长度int lettercnt=letter.length();for(int i=0;i<lettercnt;i++){// 添加当前字母cur.append(letter.charAt(i));//递归处理下一个数字backtracking(res,m1,digits,index+1,cur);// 回溯,移除最后一个字母//在回溯的时候,删除字符的索引应该是 cur.length() - 1 而不是 lettercnt - 1。这是因为 cur 可能已经发生变化,所以删除最后一个字符时应该基于 cur 当前的长度。cur.deleteCharAt(cur.length()-1);}}public static void main(String[] args){H17 test=new H17();String digits = "23";List<String> res=test.letterCombinations(digits);System.out.print(res);}}
http://www.dtcms.com/a/233798.html

相关文章:

  • 【cmder】--- Windows 下 cmder 经典常用快捷键 显著提高效率
  • el-draw的文件列表和清单内容布局实现
  • 杰理可视化SDK--系统死机异常调试
  • Flask-SQLAlchemy使用小结
  • 力扣LeetBook数组和字符串--二维数组
  • 2025爱分析·银行数字化应用实践报告|爱分析报告
  • 深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
  • 【C】-递归
  • Redis持久化模式RDB与AOF
  • Word文档重新打开后标题自动缩进的解决方法
  • 数据分析Agent构建
  • android知识总结
  • 网络编程--下篇
  • 聊一聊 .NET在Linux下的IO多路复用select和epoll
  • 逻辑填空(题量最多)
  • 数字图像处理第二次实验
  • C++.读取文件(1.5w字)
  • 高性能分布式消息队列系统(四)
  • OrCAD X Capture CIS设计小诀窍系列第二季--02.如何在Capture中设置元器件不输出到Netlist
  • 嵌入式基础
  • 算法性能分析
  • 资产智慧管理安全监测中心
  • 解决宝塔mysql数据库管理里的工具转换innodb提示成功但是有部分始终没有转换掉问题
  • Gradle:Gradle的下载、安装和配置环境及idea配置指南
  • C及C++编译链接过程详解
  • 旋转字符串的解题思路与算法分享
  • 二叉树-104.二叉树的最大深度-力扣(LeetCode)
  • Linux 下生成动态库时 -fPIC的作用详解
  • SpringBoot(八) --- SpringBoot原理
  • 电工基础【7】往返运动控制、星三角形降压启动