题目说明 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
提示:
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。
示例 示例 1:
1 2 输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
示例 3:
1 2 输入:digits = "2" 输出:["a","b","c"]
笔者理解 此题是一道字符串算法问题,在力扣题库中被定义为中等题。
解法 当笔者阅读完此题后,发现可以利用队列先进先出的特点,将字符串逐一拼接 ,让我们来看看具体如何实现的吧。
实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 class Solution { public List<String> letterCombinations (String digits) { List<String> result = new ArrayList<>(); int n = digits.length(); if (n == 0 ) { return result; } String[] lettersMap = {"abc" ,"def" ,"ghi" ,"jkl" ,"mno" ,"pqrs" ,"tuv" ,"wxyz" }; result.add("" ); for (int i = 0 ; i < n; i++) { String letter = lettersMap[digits.charAt(i) - '2' ]; int size = result.size(); for (int j = 0 ; j < size; j++) { String temp = result.remove(0 ); for (int k = 0 ; k < letter.length(); k++) { result.add(temp + letter.charAt(k)); } } } return result; } }
时间和空间效率一般,可见此解法还比较适合此题。
总结 本题是今天的一题,难度是为中等,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。