Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
思路:典型backtracking,建立一个mapping的数组,然后进行NP搜索,注意最后递归结束条件是sb.length() == digits.length()
class Solution {
public List<String> letterCombinations(String digits) {
List<String> list = new ArrayList<>();
if(digits == null || digits.length() == 0) {
return list;
}
String[] patterns = new String[] {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
StringBuilder sb = new StringBuilder();
dfs(patterns, digits, 0, sb, list);
return list;
}
private void dfs(String[] patterns, String digits, int index, StringBuilder sb, List<String> list) {
if(index == digits.length()) {
list.add(sb.toString());
return;
}
int digit = digits.charAt(index) - '0';
String pattern = patterns[digit];
for(int i = 0; i < pattern.length(); i++) {
sb.append(pattern.charAt(i));
dfs(patterns, digits, index + 1, sb, list);
sb.deleteCharAt(sb.length() - 1);
}
}
}