题解 | #牛名生成器#

牛名生成器

https://www.nowcoder.com/practice/f82fe408de8f4fbdbc30162d6b3e65bb

知识点

哈希,回溯

解题思路

使用递归来解决这个问题。首先,定义一个映射表,将数字与字母对应起来。然后,使用递归函数来生成所有可能的组合。

Java题解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param digits string字符串 
     * @return string字符串一维数组
     */
    private static final Map<Character, String> digitToLetters = new HashMap<Character, String>() {{
        put('2', "abc");
        put('3', "def");
        put('4', "ghi");
        put('5', "jkl");
        put('6', "mno");
        put('7', "pqrs");
        put('8', "tuv");
        put('9', "wxyz");
    }};

    public static String[] letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return new String[0];
        }

        List<String> combinations = new ArrayList<>();
        backtrack(combinations, digits, 0, new StringBuilder());
        return combinations.toArray(new String[0]);
    }

    private static void backtrack(List<String> combinations, String digits, int index, StringBuilder current) {
        if (index == digits.length()) {
            combinations.add(current.toString());
            return;
        }

        char digit = digits.charAt(index);
        String letters = digitToLetters.get(digit);
        for (char letter : letters.toCharArray()) {
            current.append(letter);
            backtrack(combinations, digits, index + 1, current);
            current.deleteCharAt(current.length() - 1);
        }
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务