LeetCode:电话号码的字母组合

刷题神器:LeetCode官方网站

一、题目还原

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

二、解题思路

Q17解题思路
构建每个数字对应的字符序列,利用队列思想,先进先出,循环遍历digits和相应字符序列,移除原先的旧的,一一组合,组成新的队列。

三、代码展示

① main函数

public static void main(String[] args) {
    String digits = "234";
    System.out.println(letterCombinations(digits));
}

② letterCombinations方法函数

public static List<String> letterCombinations(String digits) {
    if(null == digits || digits.isEmpty() || "".equals(digits)){
        return new ArrayList<String>();
    }
    String[] strArr={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    List <String> list = new ArrayList<>();
    list.add("");
    for(int i = 0 ; i < digits.length(); i ++){
        int size = list.size();//一定要先获取长度,后面list会动态变化
        for(int j = 0; j < size; j ++){
           String s = list.remove(0);
           for(int  k = 0 ; k < strArr[Character.digit(digits.charAt(i), 10)].length() ; k ++){
               list.add(s+strArr[Character.digit(digits.charAt(i), 10)].charAt(k));
           }
        }
    }
    return list;
}

控制台输出:

[adg, adh, adi, aeg, aeh, aei, afg, afh, afi, bdg, bdh, bdi, beg, beh, bei, bfg, bfh, bfi, cdg, cdh, cdi, ceg, ceh, cei, cfg, cfh, cfi]

Process finished with exit code 0
四、自我总结

LeetCode的第十七题,难度为中等,整体上思路还是比较清晰,由于循环层数较多,效率不是很高。
Q17提交记录
本题有个注意的地方,在进行二次循环时,一定要获得list的长度,进行循环,因为list在下面的操作中是实时变化的,长度也会变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值