17. 电话号码的字母组合

Posted yfs123456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17. 电话号码的字母组合相关的知识,希望对你有一定的参考价值。

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

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

 技术图片

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 1 public class Solution 
 2     private Map<Integer, char[]> map = null;
 3     private char[] digits = null;
 4 
 5     private List<String> helper(int cur)
 6         List<String> res = new ArrayList<>();
 7         if (cur == 0) 
 8             char[] value = map.get(digits[cur]-‘0‘);
 9             for (char c : value) 
10                 res.add(c+"");
11             
12             return res;
13         
14         List<String> sub = helper(cur - 1);
15 
16         char[] value = map.get(digits[cur]-‘0‘);
17         for (String s : sub) 
18             for (char c : value) 
19                 res.add(s+c);
20             
21         
22         return res;
23     
24 
25     public List<String> letterCombinations(String digits) 
26         if (digits.equals("")) return new ArrayList<>();
27         int count, digit = 2;
28 
29         map = new HashMap<>();
30         this.digits = digits.toCharArray();
31 
32         for (char i = ‘a‘; i <= ‘z‘;) 
33             count = (digit == 7 || digit == 9) ? 4 :3;
34             char[] value = new char[count];
35             for (int j = 0; j < count; j++) 
36                 value[j] = i++;
37             
38             map.put(digit++, value);
39         
40         return helper(digits.length()-1);
41     
42 
43     public static void main(String[] args) 
44         List<String> list = new Solution().letterCombinations("");
45         for (String s : list) 
46             System.out.print(s+", ");
47         
48     
49 

 

以上是关于17. 电话号码的字母组合的主要内容,如果未能解决你的问题,请参考以下文章

17. 电话号码的字母组合回溯Normal

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

17-电话号码的字母组合

17.电话号码的字母组合

leetcode17 电话号码的字母组合(Medium)

算法leetcode|17. 电话号码的字母组合(rust重拳出击)