每天一道算法题系列:
来源:力扣(LeetCode)
本题链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
来源是力扣,大家喜欢可以去力扣中文网做相应的其他的题,某浏览器直接搜力扣即可。
本题难度是中等

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

package com.example.demo.likou11;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。** 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。** 示例:** 输入:"23"* 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].***/
public class LetterCombinations {/*不得不说把这道题做出来的人真的厉害,反正我差(*一个太阳系那么大*)点就把它做出来了我最开始以为这道题可以用贪心算法的方式,但是发现还是不行,还需要用到递归然后我不是很懂这块,最后再看前人的做法的时候,勉强算是懂了,现在写下我的思路*/public static List<String> letterCombinations(String digits) {List<String> res = new ArrayList<>();if (digits == null || "".equals(digits)) {return res;}//一般这样的情况需要枚举所有的种类,和之前做过的罗马数转数字有点像Map<Character, String> phoneMap = new HashMap<Character, String>() {{put('2', "abc");put('3', "def");put('4', "ghi");put('5', "jkl");put('6', "mno");put('7', "pqrs");put('8', "tuv");put('9', "wxyz");}};//进入递归方法doSomething(res, phoneMap, digits, new StringBuffer(), 0);return res;}private static void doSomething(List<String> res, Map<Character, String> phoneMap, String digits, StringBuffer sb, int index) {/*这里主要是为了控制到最底层,比如说2:a,b,c和3:d,e,f和4:g,h,j当我们从2的a一直加到3的d,4的g的时候,就已经到了最底了,不会再往后面加了,需要返回去,再重新到a,d,h;然后再进入循环,再重新到a,d,j*/if (index == digits.length()) {res.add(sb.toString());} else {//取第一个数,然后再进行for循环char c = digits.charAt(index);String s = phoneMap.get(c);for (int i = 0; i < s.length(); i++) {//这里采用stringBuffer的好处是不用一直new,可以直接无脑后面啊append//顺口提一句,stringBuffer是线程安全的哦,再append的时候synchronized修饰了sb.append(s.charAt(i));doSomething(res, phoneMap, digits, sb, index + 1);/*StringBuffer sb = new StringBuffer();sb.append("a");sb.append("b");sb.append("c");sb.append("d");sb.append("e");System.out.println(sb.toString());sb.deleteCharAt(1);System.out.println(sb.toString());输出结果abcdeacde*///如果不删除 , 就变成了adg, adgh, adghi, adghieg, adghiegh, adghieghisb.deleteCharAt(index);}}}public static void main(String[] args) {String s = "234";System.out.println(letterCombinations(s));}
}

上一篇文章:每天一道算法题系列十六之最接近的三数之和
请继续关注我,如果后面不忙了,会写一系列关于的设计模式等等等的文章。
如果本篇内容有问题,请第一时间联系我,我会第一时间修改。
谢谢大家。

每天一道算法题系列十七之电话号码的字母组合相关推荐

  1. 每天一道算法题系列十二之整数转罗马数字

    每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/integer-to-roman/ 来源是力扣,大家喜欢可以去力扣中文 ...

  2. 一天一道算法题--5.30---递归

    感谢微信平台:  一天一道算法题 --------每天多一点进步--------- 今天 休假 这题 也很水 能发现 规律就好 明天 再也不能这样了 forgive me ---------- 转载于 ...

  3. 一天一道算法题--6.15--卡特兰数

    感谢微信平台---一天一道算法题---每天多一点进步- problem: 12个高矮不同的人 排成两排 每排必须是从矮到高排列 而且第二行比对应的第一排的人高 问排列方式有多少种? analyse: ...

  4. 一道算法题跟大家分享

    无意中看到一道算法题,拿出我的解法与大家分享. 题目:输出1,2,3,4四个数字能组成的互不相同且无重复的三位数并统计满足条件的三位数个数 大家先想想,再看答案吧. View Code 1 /// & ...

  5. 搜狗2020秋招笔试的一道算法题

    搜狗2020秋招的一道算法题 有A,B,C三种样品,凑齐三个样品各一个就可以领取一个奖品.任意两个样品可兑换另一种样品,如AA可兑换一个B或一个C,AB可兑换一个C.输入ABC,问最多可以领取多少奖品 ...

  6. 截止目前为止,我遇到的最难的一道算法题:计算相邻两个数的最大差值

    hello,今天给大家带来一道算法题.这道算法题,是我目前为止,见过最难的一道题.那么到底是怎样的一道算法题呢?如下: 题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值. 要求时间复杂度O( ...

  7. Leetcode算法Java全解答--17. 电话号码的字母组合

    Leetcode算法Java全解答–17. 电话号码的字母组合 文章目录 Leetcode算法Java全解答--17. 电话号码的字母组合 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用 ...

  8. Homebrew作者面试Google被拒,只因写不出一道算法题

    相信很多人听说过关于Max Howell(Homebrew的作者)的故事: Max Howell在Google面试,但Google拒绝了他,给出的答复是:"虽然我们90%的工程师都用你写的软 ...

  9. 最佳买卖股票时间 Java_一道算法题的讲解-买卖股票的最佳时间

    今天讲解一道简单的算法题: 问题描述 假设我们有一个数组, 数组中按顺序每个元素的值表示当天的股票价格. 例如,数组: [7,1,5] 表示股票第一天是7元,第二天是1元,第三天是5元 约定,只能买一 ...

最新文章

  1. 写个自己的Xcode4插件(二)
  2. CentOS HarBor安装与配置
  3. 华为云举办AI经典论文复现活动,打造领先AI开发者学习社区
  4. Error pulling origin: error: The following untracked working tree files would be overwritten by...
  5. cartographer探秘第四章之代码解析(七)--- pose_extrapolator.h 及 imu_tracker.h
  6. 面向对象的三大特性 - 继承、多态、封装
  7. vs2013连接数据库
  8. MySQL设计说明书_数据库详细设计说明书-模板.doc
  9. 我的新书《Android App开发从入门到精通》终于出版啦
  10. 计算经纬度距离工具类
  11. 冠捷云计算机功能,USB3.0显示器亮相!AOC多款LCD新品赏
  12. 检查型异常有哪些java_JAVA系列之检查型异常与非检查型异常的详解
  13. 【12c】直方图Histograms
  14. fastadmin使用ECharts制作统计图
  15. CSS 交集选择器和并集选择器
  16. 峰值利用率80%+,视频云离线转码自研上云TKE实践
  17. Could not autowire. No beans of xxx 解决办法
  18. FASTAPI接口服务
  19. 2022双十一买什么好?行家推荐四大最值得入手的数码好物
  20. pc前端js调起电脑本地应用程序(需要客户端配合 自定义URL Protocol 协议 )

热门文章

  1. java基础:面向对象编程23-this课后练习boygirl
  2. 计算机语言属于人类意识的客观内容,《2008年考研政治800题精解》世界的物质性和人的实践活动(5)...
  3. Excel 多条件筛选 与 数据透视表 实现
  4. C# 窗体修改应用程序图标
  5. android 图标弹跳动画,动效教程 | 5 分钟快速制作弹跳加载小动画
  6. 四旋翼无人机动力学模型及控制
  7. 计算机毕业设计之郑州灾区志愿者报名管理系统
  8. linux下执行php命令echo不输出,linux echo命令以及linux echo命令提示权限不够的方法...
  9. 指标波动的原因很头疼?不妨试试“问诊”法!
  10. 后天就是七夕节,你准备好了吗?送上几个七夕代码,展示你技能的时候到了!