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

JAVA学习-练习试用Java实现电话号码的字母组合

问题:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"

输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""

输出:[]

示例 3:

输入:digits = "2"

输出:["a","b","c"]

 提示:

0 <= digits.length <= 4

digits[i] 是范围 ['2', '9'] 的一个数字。

解答思路:

1. 建立一个数字到字母的映射表,使用HashMap来存储。

2. 使用回溯法,递归地生成所有的字母组合。

3. 定义一个helper方法,传入当前的组合字符串prefix和剩余的数字字符串digits,递归生成字母组合,并将结果存入结果列表。

4. 在helper方法中,首先判断如果digits为空,说明已经把所有数字都处理完了,将当前的组合字符串加入结果列表,并返回。

5. 如果digits不为空,取出digits的第一个字符,找到对应的字母列表,遍历字母列表,对每个字母进行递归调用helper方法,在组合字符串后面加上当前的字母,传入新的剩余数字字符串digits.substring(1)。

6. 在主方法中,先判断给定的数字字符串是否为空,如果为空,直接返回空的列表。

7. 否则,调用helper方法,传入空的组合字符串和给定的数字字符串,并返回结果列表。

代码如下:

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Solution {public List<String> letterCombinations(String digits) {List<String> result = new ArrayList<>();if(digits == null || digits.length() == 0){return result;}Map<Character, String> map = new HashMap<>();map.put('2', "abc");map.put('3', "def");map.put('4', "ghi");map.put('5', "jkl");map.put('6', "mno");map.put('7', "pqrs");map.put('8', "tuv");map.put('9', "wxyz");helper(result, "", digits);return result;}private void helper(List<String> result, String prefix, String digits){if(digits.length() == 0){result.add(prefix);return;}char c = digits.charAt(0);String letters = map.get(c);for(int i = 0; i < letters.length(); i++){helper(result, prefix + letters.charAt(i), digits.substring(1));}}}

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

http://www.lryc.cn/news/345996.html

相关文章:

  • js代码中关于async await的滥用 async await的滥用
  • 基础算法,贪心算法,贪心策略,OJ练习
  • 一文讲透亚马逊云三层架构
  • 只需3步,使用Stable Diffusion无限生成AI数字人视频(附安装包)
  • RustGUI学习(iced)之小部件(七):如何使用图像image部件来显示图片?
  • Substrate 入门课第 14 期圆满结束,岗位内推直达知名 Web3 项目!
  • android进阶-AIDL
  • 贪心算法-活动选择问题背包问题
  • Web3工具集合 - 00
  • 分布式与集群的区别
  • 学习心得:如何开始学习一款MCU
  • 顺序表的实现(迈入数据结构的大门)(1)
  • RERCS系统-WDA+BOPF框架实战例子 PART 1-新建List UIBB(列表组件)并分配Feeder Class和Node Element
  • 如何从 iPhone 恢复已删除或丢失的联系人?
  • RISCV 外部GCC 工具链安装@FreeBSD15
  • 全栈开发之路——前端篇(9)插槽、常用api和全局api
  • 减瘦误区、雷点、陷阱和挑战怎么应对
  • Leetcode—946. 验证栈序列【中等】
  • Selenium定位方法及代码
  • GitHub搭建免费博客
  • 开源代码分享(28)-含分布式光伏的配电网集群划分和集群电压协调控制
  • idea-自我快捷键-2
  • 深入学习指针3
  • 礼赞劳动节,致敬劳动者。节日随想:疾笔耕耘也是一种劳动方式。
  • 学习Java的日子 Day45 HTML常用的标签
  • 兔子与狮子
  • GNU/Linux - 系统启动流程及rcS脚本介绍
  • 对象,字符串的解构赋值
  • Django 静态文件管理与部署指南
  • ORACLE ODAX9-2的一个误告警Affects: /SYS/MB的分析处理