我是靠谱客的博主 怕黑含羞草,这篇文章主要介绍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 不对应任何字母。


示例:
复制代码
1
2
3
输入:"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。

代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 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);         }     }
复制代码
1
2
3
4
5
6
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下: 长按订阅更多精彩▼ 如有收获,点个在看,诚挚感谢

最后

以上就是怕黑含羞草最近收集整理的关于leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!的全部内容,更多相关leetcode17.内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部