参考:大佬
思路:递归实现

public class Solution { List<String> res = new ArrayList<String>(); String[] list = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; public List<String> letterCombinations(String digits) { if(digits == null || digits.length() == 0) return new ArrayList<String>(); iterStr(digits, "", 0); return res; } public void iterStr(String str, String letter, int index){ if(index == str.length()){ res.add(letter); } int pos = str.charAt(index) - ‘0‘; String help = list[pos]; for (int i = 0; i < help.length(); i++) { iterStr(str, letter + help.substring(i, i+1), index +1); } } }
队列实现
String[] list = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
List<String> res = new ArrayList<String>();
public List<String> letterCombinations(String digits) {
if(digits == null || digits.length() == 0) return new ArrayList<String>();
int pos = digits.charAt(0) - ‘0‘;
String help = list[pos];
int size = help.length();
for (int i = 0; i < size; i++) {
res.add(help.substring(i, i+1));
}
for (int i = 1; i < digits.length(); i++) {
size = res.size();
pos = digits.charAt(i) - ‘0‘;
help = list[pos];
for (int j = 0; j < size; j++) {
String op = res.remove(0);
for (int k = 0; k < help.length(); k++) {
res.add(op + help.substring(k, k + 1));
}
}
}
return res;
}
原文:https://www.cnblogs.com/shish/p/13335057.html