import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param digits string字符串 * @return string字符串一维数组 */ public String[] letterCombinations (String digits) { String [] str = {"xxx", "xxxx", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; if (digits.equals("")) { return null; } ArrayList<String> list = new ArrayList<>(); if (digits.length() >= 2) { String substring = digits.substring(0, 2); char c = substring.charAt(0); char c1 = substring.charAt(1); int n = Integer.parseInt(c - 48 + ""); int m = Integer.parseInt(c1 - 48 + ""); String s = str[n]; String s1 = str[m]; for (int i = 0; i < s.length(); i++) { for (int j = 0; j < s1.length(); j++) { StringBuilder stringBuilder = new StringBuilder(s.charAt(i) + ""); stringBuilder.append(s1.charAt(j)); list.add(stringBuilder.toString()); } } if (digits.length() != 3) { return list.toArray(new String[0]); } else { char c2 = digits.charAt(2); int m1 = Integer.parseInt(c2 - 48 + ""); String s2 = str[m1]; int size = list.size(); ArrayList<String> list1 = new ArrayList<>(); for (int i = 0; i < size; i++) { String s3 = list.get(i); for (int k = 0; k < s2.length(); k++) { StringBuilder stringBuilder = new StringBuilder(s3); stringBuilder.append(s2.charAt(k)); list1.add(stringBuilder.toString()); } } return list1.toArray(new String[0]); } } if(digits.length()==1){ int result = Integer.parseInt(digits); String s = str[result]; return s.split(""); } return list.toArray(new String[0]); } }
本题知识点分析:
1.哈希表存取
2.集合遍历和存取
3.集合如何转字符串数组
4.字符串转数字
5.字符如何从Ascii码转化成数字
本题解题思路分析:
1.如果形参长度为0,返回空数组
2.如果形参长度为1,返回的给定字符串数组[下标]的各个字符,转字符串数组即可
3.如果形参长度>=2分类讨论
4.长度为2,就取出这两个字符串,然后双层for遍历添加到集合
5.长度为3,先做完长度为2的,然后和第三个字符串双层for同理即可
6.最后集合转字符串数组,list.toArray(new String[])