DFS
class Solution {
public List<String> letterCombinations(String digits) {
List<String> list = new ArrayList<String>();
if(digits.length() == 0) return list;
Map<Character, String> map = new HashMap<Character, String>();
map.put('1', "");
map.put('2', "abc");
map.put('3', "def");
map.put('4', "ghi");
map.put('5', "jkl");
map.put('6', "mno");
map.put('7', "pqrs");
map.put('8', "tuv");
map.put('9', "wxyz");
char[] cur = new char[digits.length()];
dfs(map, digits, cur, 0, list);
return list;
}
public void dfs(Map<Character, String> map, String digits, char[] cur, int d, List<String> list) {
if (d == digits.length()) {
list.add(new String(cur));
return;
}
char digit = digits.charAt(d);
for (char letter : map.get(digit).toCharArray()) {
cur[d] = letter;
dfs(map, digits, cur, d + 1, list);
}
}
}
本题对结果没有任何限制,使用dfs搜索就能实现。复杂度O(4^N)。N数字,每个数字最多有4个可能的字母。