自己乱写的可能是bfs
class Solution {
private static String[] getFromnum(int num) {
if (num < 7) {
String[] ss = new String[3];
int flag = 97 + (num - 2) * 3;
ss[0] = (char) flag + "";
ss[1] = ((char) (flag + 1)) + "";
ss[2] = ((char) (flag + 2)) + "";
return ss;
} else if (num == 7) {
String[] ss = new String[4];
ss[0] = 'p' + "";
ss[1] = 'q' + "";
ss[2] = 'r' + "";
ss[3] = 's' + "";
return ss;
} else if (num == 8) {
String[] ss = new String[3];
ss[0] = 't' + "";
ss[1] = 'u' + "";
ss[2] = 'v' + "";
return ss;
} else {
String[] ss = new String[4];
ss[0] = 'w' + "";
ss[1] = 'x' + "";
ss[2] = 'y' + "";
ss[3] = 'z' + "";
return ss;
}
}
public static List<String> letterCombinations(String digits) {
char[] charArray = digits.toCharArray();
int len = charArray.length;
List<String> list = new ArrayList<String>();
if (len == 0)
return list;
int num = charArray[0];
num -= 48;
String[] fromnum = getFromnum(num);
for (String s : fromnum) {
list.add(s);
}
for (int i = 1; i < len; i++) {
num = charArray[i];
num -= 48;
List<String> list2 = new ArrayList<String>();
String[] fromnum2 = getFromnum(num);
for (String s : list) {
for (String s4 : fromnum2) {
list2.add(s+s4);
}
}
list = list2;
}
return list;
}
}
dfs
char[][] letters={
{'a','b','c'},{'d','e','f'},
{'g','h','i'},{'j','k','l'},{'m','n','o'},
{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}
};
char[] charArray;
List<String> list;
char[] string;
public List<String> letterCombinations(String digits) {
charArray = digits.toCharArray();
list=new ArrayList<String>();
if(charArray.length==0) return list;
string=new char[charArray.length];
dfs(0);
return list;
}
public void dfs(int idx) {
if(idx==charArray.length) {
list.add(new String(string));
return ;
}
char c=charArray[idx];
char[] letter=letters[c-'2'];
for(char ch:letter) {
string[idx]=ch;
dfs(idx+1);
}
}