leetcode17- Letter Combinations of a Phone Number电话号码的字母组合

文章目录

给一个不包含’0’和’1’的数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。下图的手机按键图,就表示了每个数字可以代表的字母。
在这里插入图片描述
输入: “23”
输出: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]
解释:
‘2’ 可以是 ‘a’, ‘b’ 或 ‘c’
‘3’ 可以是 ‘d’, ‘e’ 或 ‘f’

一、分析

  • 排列组合的简单应用
  • 先获取数字字符串的每一个数字字符,然后再获取每一个数字对应的字符串
  • 再遍历这个字符串
  • 再按上述逻辑递归下去即可
  • 下图帮助理解
    在这里插入图片描述
  • 完整代码
  String[] phoneLetters = {"","","abc","def","ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
 public List<String> letterCombinations(String digits) {
        List<String> results = new ArrayList<>();
        if (digits.length() == 0){
            return results;
        }
        StringBuilder sb = new StringBuilder();
        helper02(digits, phoneLetters, 0, sb, results);
        return results;
    }
 private static void helper02(String digits,
                                 String[] phoneLetters,
                                 int startIndex,
                                 StringBuilder item,
                                 List<String> results){

        if (item.length() == digits.length()){
            results.add( item.toString());
            return;
        }
        //遍历 digits 获取其中每一个数字字符 且转换为数字
        for (int i=startIndex; i<digits.length(); i++){
            int num = digits.charAt(i) - '0';
            //从事先定义好的字符串数组中 获取对应的字符串
            String phoneString = phoneLetters[num];
            //再 遍历该字符串
            for (int j = 0; j<phoneString.length(); j++){
                item.append(phoneString.charAt(j));
                //开始递归到下一层 遍历digits的下一个字符
                helper02(digits, phoneLetters, i+1, item, results);
                //回溯
                item.deleteCharAt(item.length() - 1);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值