2022/11/08 算法练习 力扣17. 电话号码的字母组合

1、题目描述

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

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

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

2、完整代码

class Solution {
    static char[] ques;   //每个数字对应的字符数组
    static int sum ;  //动态变化的当前字符串的长度
    static Map<Character,String> map ;  //将数字-字母以键值对的方式储存起来
    static List<String> list;  //需要返回的List集合
    public List<String> letterCombinations(String digits) {
        ques= digits.toCharArray();  //将输入的数字拆分字符,储存在字符数组中
        sum = 0;  //当前拼接的字符串长度为0
        map = new HashMap(); 
        list= new ArrayList<>();
        map.put('2',"abc");  //电话号码对应的字母
        map.put('3',"def");
        map.put('4',"ghi");
        map.put('5',"jkl");
        map.put('6',"mno");
        map.put('7',"pqrs");
        map.put('8',"tuv");
        map.put('9',"wxyz");
        Answer(sum,ques.length,"");  //参数为当前长度,最后的长度,以及一个空字符串
        return list;
    }
     private static void Answer(int sum, int length,String a) {
          if(length==0){    //输入为空,则返回空
            return;
        }
        char[] chars = map.get(ques[sum]).toCharArray();   //拿到第一个数字('2')对应的字符串,转为字符数组('a','b','c')  
        sum = sum+1;//先将sum+1,如果+1后的sum刚刚好为length,即表明只需要加上最后一个字符,字符串就完成
        if(sum==length){    //遍历当前数字对应的字符数组
            for(int i=0;i<chars.length;i++){    //进行字符串最后一轮字符串拼接之后,加入集合中
                String ans = a + chars[i];
                list.add(ans);
            }
            return;   //回退到上一级
        }
        if(sum<length){       //若这不是最后一次拼接
            for(int i = 0;i<chars.length;i++){    //遍历当前数字对应的字符数组
                String ans = a + chars[i];    //进行字符串拼接之后进入下一轮
                Answer(sum, length,ans);
            }
        }
    }
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值