电话号码的字母组合 - LeetCode第17题

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

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

示例:

输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

解题思路:

可以按照递归的思路解题,递归遍历每一个数值,每个数字取一个字母,拼接起来。

import com.alibaba.fastjson.JSON;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Auther: wjj
 * @Date: 2020/12/7 19:50
 * @Description:
 */
public class LeetCode17 {
    private static List<String> resList = Lists.newArrayList();

    private static Map<Character, String[]> map = new HashMap<>();
    
    public static void main(String[] args) {
        String letters = "23";
        letterCombinations(letters);
        System.out.printf("结果:" + JSON.toJSONString(resList));
    }
    
    static {
        map.put('2', new String[]{"a", "b", "c"});
        map.put('3', new String[]{"d", "e", "f"});
        map.put('4', new String[]{"g", "h", "i"});
        map.put('5', new String[]{"j", "k", "l"});
        map.put('6', new String[]{"m", "n", "o"});
        map.put('7', new String[]{"p", "q", "r", "s"});
        map.put('8', new String[]{"t", "u", "v"});
        map.put('9', new String[]{"w", "x", "y", "z"});
    }

    public static List<String> letterCombinations(String digits) {
        char[] chars = digits.toCharArray();
        int len = chars.length;
        combine(chars, "" , len, 0);
        return resList;
    }

    private static void combine(char[] chars, String res, int len ,int index){
        if(chars.length == 0){
            resList.add("");
            return;
        }
        if(index == len){
            resList.add(res);
            return;
        }
        char key = chars[index];
        String[] arr = map.get(key);
        for(int i = 0; i< arr.length; i++){
            combine(chars, res + arr[i], len, index + 1);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值