题目
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
分析
回溯算法,先把数字对应的字母初始化一下,然后,然后,去递归每次都添加进一个字母就好了。
没有用数组,用的都是java里的list
提交了之后是5ms发现别人的是2/3ms,而且都是数组。。。思想是一样的,差出去的应该就是我用的list。
还有 我的码确实有点儿长奥 嗯嗯嗯。。。。
扫描二维码关注公众号,回复:
1059674 查看本文章
代码
class Solution { static List<List<Character>> list = new ArrayList<>(); public static List<String> letterCombinations(String digits) { List<String> result = new ArrayList<>(); if (digits==null || digits.length()==0) return result; addList(); help(result,digits,""); return result; } public static void help(List<String> result, String digits,String temp){ if (digits.length() == 0){ result.add(temp); return; } int num = Integer.parseInt(digits.substring(0,1)); digits = digits.substring(1,digits.length()); for (int i = 0; i < list.get(num-2).size(); i++) { temp += list.get(num-2).get(i); help(result,digits,temp); temp = temp.substring(0,temp.length()-1); } } public static void addList(){ List<Character> l2 = new ArrayList<>(); List<Character> l3= new ArrayList<>(); List<Character> l4 = new ArrayList<>(); List<Character> l5 = new ArrayList<>(); List<Character> l6 = new ArrayList<>(); List<Character> l7 = new ArrayList<>(); List<Character> l8 = new ArrayList<>(); List<Character> l9 = new ArrayList<>(); l2.add('a');l2.add('b');l2.add('c'); l3.add('d');l3.add('e');l3.add('f'); l4.add('g');l4.add('h');l4.add('i'); l5.add('j');l5.add('k');l5.add('l'); l6.add('m');l6.add('n');l6.add('o'); l7.add('p');l7.add('q');l7.add('r');l7.add('s'); l8.add('t');l8.add('u');l8.add('v'); l9.add('w');l9.add('x');l9.add('y');l9.add('z'); list.add(l2);list.add(l3);list.add(l4);list.add(l5); list.add(l6);list.add(l7);list.add(l8);list.add(l9); } }