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[])

京公网安备 11010502036488号