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

相关推荐
范中勤1 分钟前
OSS 多文件打包回流上传:流式管道无落地 VS 临时磁盘落地,两种工业方案深度对比
java·高并发·zip·oss·架构选型
无毁的湖光-Al3 分钟前
解Bug之路-隔离故障点后业务不恢复?-热点Key处理与亚稳态故障
java·数据库·mysql
yi0115 分钟前
LeetCode 3. 无重复字符的最长子串|不定长滑动窗口:什么时候更新最大值?
笔记·python·算法·leetcode·双指针·滑动窗口
Eyfcom9 分钟前
快递管理系统中的电子围栏实战:高德与谷歌双平台技术选型与实现
java·后端·快递管理系统
Rain的Java大神之路10 分钟前
Java PDF导出,90%的人选错库!11个生产坑+选型+代码,一次讲透
java·后端·面试
y1su12 分钟前
Leetcode 单调栈模板
java·开发语言·数据结构·算法·leetcode
郑州光合科技余经理25 分钟前
出海外卖平台:支付对接为什么要和下单收款分开
android·java·开发语言·前端·后端·php·ai编程
索尔~古德曼27 分钟前
CF(1400-1400&1300-1500)
算法
一只旭宝29 分钟前
树的家族全景:从二叉树到 B+ 树
数据结构
我是人✓31 分钟前
Spring框架的事务管理
java·后端·spring