电话号码的字母组合

2019-11-29  本文已影响0人  二进制的二哈

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number

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

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

示例.png

示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

Java代码:

class Solution {
    public List<String> letterCombinations(String digits) {
        if(digits == null || digits.length() == 0)
            return new ArrayList();
        if(digits.length() == 1){
            //仅有一位时
            return getList(digits.charAt(0));
        }

        int i = 0;
        List<String> ans = null;
        while(i < digits.length()){
            char c = digits.charAt(i);
            List<String> leftList = getList(c);
            if(i == 0){
                ans = merge(leftList,getList(digits.charAt(i+1)));
            }else if(i != digits.length() -1 ){
                ans = merge(ans,getList(digits.charAt(i+1)));
            }
            i++;
        }
        return ans;
    }

    private List<String> getList(char c){
        List<String> ans = null;
        switch(c){
            case '2':
                ans = Arrays.asList("a","b","c");
                break;
            case '3':
                ans = Arrays.asList("d","e","f");
                break;
            case '4':
                ans = Arrays.asList("g","h","i");
                break;
            case '5':
                ans = Arrays.asList("j","k","l");
                break;
            case '6':
                ans = Arrays.asList("m","n","o");
                break;
            case '7':
                ans = Arrays.asList("p","q","r","s");
                break;
            case '8':
                ans = Arrays.asList("t","u","v");
                break;
            case '9':
                ans = Arrays.asList("w","x","y","z");
                break;
        }
        return ans;
    }

    private List<String> merge(List<String> left,List<String> right){
        if(right == null)
            return left;
        List<String> newList = new ArrayList<>();
        for(String l : left){
            for(String r : right){
                newList.add(l+r);
            }
        }
        return newList;
    }
}
上一篇下一篇

猜你喜欢

热点阅读