我是靠谱客的博主 怕黑含羞草,最近开发中收集的这篇文章主要介绍leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人

前文回顾:

leetcode1. 两数之和--每天刷一道leetcode系列!

leetcode2. 两数相加--每天刷一道leetcode系列!

leetcode3. 无重复字符的最长子串--每天刷一道leetcode系列!

leetcode4. 寻找两个有序数组的中位数--每天刷一道leetcode系列!

leetcode5.最长回文子串--每天刷一道leetcode系列!

leetcode9. 回文数--每天刷一道leetcode系列!

leetcode11. 盛最多水的容器--每天刷一道leetcode系列!

leetcode14. 最长公共前缀--每天刷一道leetcode算法题系列!

leetcode15. 三数之和--每天刷一道leetcode算法系列!

leetcode16. 最接近的三数之和--每天刷一道leetcode算法系列!

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。


示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

解析

对于输入23,如下图所示。


很显然这是一个组合问题,可能你会觉得着很简单,两层循环即可搞定,那么如果输入是234呢,可能你会说3层循环就好了。但是如果是23456789,难道写个8层循环吗。这时候递归就派上用场了。
模仿循环的过程,我们将每次递归得到的结果记录在一个变量letter中。假设下一次递归遇到的字符为c,则letter=letter+c。
那么递归什么时候终止呢?我们还需要加一个变量index记录递归的层次,类似于循环到了哪一层。当index==digits.length()的时候,递归就应该终止了。
上面说的是递归的过程该是什么样子。本题中不仅有递归,还有一个循环。因为其实存在2-->abc, 3-->def,…..这样一个映射关系。我们可以将这种关系用一个数组telMap表示,telMap[2]就可以表示abc,telMap[3]就可以表示def。

代码

 String[] telMap = {"_","!@#","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    List<String> res = new ArrayList<String>();
    public List<String> letterCombinations(String digits) {
        if(digits == null || digits.length() == 0){
            return res;
        }
        process(digits, "", 0);

        return res;

    }

    private void process(String digits, String letter, int index){
  //递归的第一步,确定终止条件,
        if(index == digits.length()){
            res.add(letter);
            return;
        }
        String str = telMap[digits.charAt(index)-'0'];
        for(int i = 0; i < str.length(); i++){
            process(digits,letter+str.charAt(i),index+1);
        }
    }
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

最后

以上就是怕黑含羞草为你收集整理的leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!的全部内容,希望文章能够帮你解决leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部