LeetCode:17电话号码的字母组合

java 复制代码
class Solution {

    List<String> res = new ArrayList<>();
    StringBuilder path = new StringBuilder();
    //手机按键映射表,0,1没有字母用空字符串占位
    String[] letterMap = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    
    public List<String> letterCombinations(String digits) {
        if(digits == null || digits.length() == 0){
            return res;
        }    
        backtrack(digits,0);
        return res;
    }
    //index代表当前正在处理的digits的第几个数字
    private void backtrack(String digits,int index){
        if(index == digits.length()){
            res.add(path.toString());
            return;
        }
        //取出数字字符
        char digitChar = digits.charAt(index);
        //将数字字符转换成数字
        int digit = digitChar - '0';
        //查找该数字对应的字母组合
        String letters = letterMap[digit];

        for(int i = 0; i < letters.length(); i++){
            path.append(letters.charAt(i));
            backtrack(digits, index + 1);
            path.deleteCharAt(path.length() - 1);
        }
    }
}

deleteCharAt(int index):删除位于指定下标处的那个字符

解题思路:

首先新建两个变量res和path,res用于盛放最终的结果集,path用于盛放单个的结果

然后定义一个字符数组,用于映射手机按键

定义一个回溯函数,当index与要求的digits的长度相等则将path放入到res中

取出digits的数字字符然后转成数字,并查找对应的字符组合

循环遍历,将字符添加到path中然后递归处理

最后将字符串长度-1

相关推荐
程序员黑豆3 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
江畔柳前堤4 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
hey_sml4 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo4 小时前
数据结构-环形链表
java·数据结构·链表
Forever Nore5 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
萧瑟余晖5 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才6 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio6 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
罗西的思考7 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX7 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm