题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:输入:digits = ""
输出:[]
示例 3:输入:digits = "2"
输出:["a","b","c"]提示:0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。

解决方法1:

解决思路:
每次增加一个字符,就对之前的list 进行遍历增加新字符,以此类推。

    public static List<String> letterCombinations(String digits) {char[] chars = digits.toCharArray();List<String> result = new ArrayList<>();for (char aChar : chars) {if (result.isEmpty()) {result.addAll(get(aChar));}else {List<String> strings = get(aChar);List<String> temp = new ArrayList<>();for (String s : result) {for (String string : strings) {temp.add(s + string);}}result = temp;}}return result;}public static List<String> get(char input){switch (input) {case '2':return Arrays.asList("a", "b", "c");case '3':return Arrays.asList("d", "e", "f");case '4':return Arrays.asList("g", "h", "i");case '5':return Arrays.asList("j", "k", "l");case '6':return Arrays.asList("m", "n", "o");case '7':return Arrays.asList("p", "q", "r","s");case '8':return Arrays.asList("t", "u", "v");case '9':return Arrays.asList("w", "x", "y","z");}return Arrays.asList("");}

解决方法2:

class Solution {public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<String>();if (digits.length() == 0) {return combinations;}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");}};backtrack(combinations, phoneMap, digits, 0, new StringBuffer());return combinations;}public void backtrack(List<String> combinations, Map<Character, String> phoneMap, String digits, int index, StringBuffer combination) {if (index == digits.length()) {combinations.add(combination.toString());} else {char digit = digits.charAt(index);String letters = phoneMap.get(digit);int lettersCount = letters.length();for (int i = 0; i < lettersCount; i++) {combination.append(letters.charAt(i));backtrack(combinations, phoneMap, digits, index + 1, combination);combination.deleteCharAt(index);}}}
}

算法---给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合相关推荐

  1. 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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

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

    一.解题思路 用map可以加快查询速度,DFS深度搜索,DFS是一种很常见的对于多循环或者n!的好的搜索算法. 二.代码:C++ void init(map<char, string> & ...

  3. 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...

  4. 【算法-Java】给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

    一.示例 示例 1: 输入:s = "25525511135" 输出:["255.255.11.135","255.255.111.35"] ...

  5. 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数

    给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数.            1.在文件中至少存在这样一个数?            2.如果有足够的内存,如何处理? ...

  6. 01迷宫:有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...

  7. java 不包含 字母和数字_Java String - 查看字符串是否仅包含数字而不包含字母

    性能方面parseInt等等比其他解决方案要糟糕得多,因为至少需要异常处理. 我已经运行了jmh测试并且发现使用charAt迭代字符串并且将字符与边界字符进行比较是测试字符串是否仅包含数字的最快方法. ...

  8. java小编程----给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

    package com.henu;import java.util.Arrays;/*** @author limengdong* @date 2019年7月19日* @classroom 208bi ...

  9. 给定一个9位数字的ISBN,求其校验位

    问题描述:   给定给定一个9位数字的ISBN,求其校验位.ISBN格式为2-02-033598,校验位的计算方法如下:从左到右依次将各位数字乘10,9,8,--,2,求出其和S,作模运算得M=S m ...

最新文章

  1. dede首页调用文章标题|概述|所在栏目
  2. linux上最好用的sh --zsh
  3. 九度OJ 1011:最大连续子序列 (DP)
  4. C++实现桶排序(附完整源码)
  5. Word/Excel文档伪装病毒-kspoold.exe分析
  6. CentOSLinux安装Docker容器
  7. JDK8的日期时间类2
  8. 鸿蒙明年可以在手机上用吗,华为王成录:鸿蒙已满足在手机上使用,明年一二月份向部分用户开放...
  9. 基于asp.net的网上书店商城设计与实现
  10. java webpack web项目_零基础如何学习web前端,入门教程分享
  11. hdu 1249 三角形 (递推)
  12. 编译原理 【国防科技大学网课】【笔记】【 陈火旺】 ——用于期末考试 【持续更新ing】
  13. Zigbee协议栈————广播组网
  14. dreamweaver cs6 html教程,Dreamweaver cs6安装详细图文教程
  15. Ubuntu系统shipyard安装
  16. 如何高效阅读一篇论文
  17. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。(js代码)
  18. 贪心算法 田忌赛马问题
  19. 根据地区名称获得经纬度
  20. 如何屏蔽网站不需要的蜘蛛

热门文章

  1. c语言四则运算实验报告,c语言四则运算实验报告.doc
  2. mybatis-plus 多列映射成数组_JavaScript 为什么需要类数组
  3. 10、计算机图形学——几何介绍(曲面的分类以及示例)
  4. vue 数据更新不及时_陈词懒调的《未来天王》正式完结,再也不用担心她更新不及时了!...
  5. docker配置国内镜像源
  6. UNITY技巧-查找脚本被哪个场景引用
  7. 《C++ Primer Plus》学习笔记——C++程序创建到运行的整个过程
  8. 编写高性能的 Lua 代码
  9. 使用getopts处理选项
  10. Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义