LeetCode-017-电话号码的字母组合

算法琉璃客
• 阅读 1372

电话号码的字母组合

题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

LeetCode-017-电话号码的字母组合

示例说明请见LeetCode官网。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:解法一
首先,将所有的映射列出来mappings,然后,遍历digits中的每一个字符,从mappings中取出对应的字母,拼到一起,最终遍历完后把结果放到结果集里面,返回。
import java.util.*;

public class Solution {

    private static Map<Integer, List<Character>> mappings = new HashMap<>();

    static {
        mappings.put(2, new ArrayList<>(Arrays.asList('a', 'b', 'c')));
        mappings.put(3, new ArrayList<>(Arrays.asList('d', 'e', 'f')));
        mappings.put(4, new ArrayList<>(Arrays.asList('g', 'h', 'i')));
        mappings.put(5, new ArrayList<>(Arrays.asList('j', 'k', 'l')));
        mappings.put(6, new ArrayList<>(Arrays.asList('m', 'n', 'o')));
        mappings.put(7, new ArrayList<>(Arrays.asList('p', 'q', 'r', 's')));
        mappings.put(8, new ArrayList<>(Arrays.asList('t', 'u', 'v')));
        mappings.put(9, new ArrayList<>(Arrays.asList('w', 'x', 'y', 'z')));
    }

    public static List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return new ArrayList<>();
        }
        Set<String> result = new HashSet<>();
        for (Character temp : mappings.get(Integer.valueOf(String.valueOf(digits.charAt(0))))) {
            result.add(temp.toString());
        }
        for (int i = 1; i < digits.length(); i++) {
            Set<String> tempResult = result;
            result = new HashSet<>();
            for (String s : tempResult) {
                for (Character character : mappings.get(Integer.valueOf(String.valueOf(digits.charAt(i))))) {
                    if (!result.contains(s + character)) {
                        result.add(s + character);
                    }
                }
            }
        }
        return new ArrayList<>(result);
    }

    public static void main(String[] args) {
        List<String> strings = letterCombinations("2");
        for (String string : strings) {
            System.out.print(string + "--");
        }
    }
}
【每日寄语】睡去昨天的疲惫,忘却昨天的烦恼,睁开今天的双眼,打开今天的美好。
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
28篇论文、6大主题带你一览CVPR2020研究趋势
  !(http://dingyue.ws.126.net/2020/0625/c176bdbej00qchkrg001ld200p000ang00it0080.jpg)  编译|陈大鑫  编辑|丛末  首度于线上召开的CVPR2020会议已经落下帷幕。今年,大会共有1467篇论文被接收,共举办了29个Tutorial、64
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Dubbo爆出严重漏洞!可导致网站被控制、数据泄露!附解决方案
http://dy.163.com/v2/article/detail/F5FPIFRU0511Q1AF.html  !(http://dingyue.ws.126.net/2020/0216/125ec4c4p00q5rcrs0019d200ig009qg00ig009q.png)  来源:华为云  原文地址:https://w