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”].
解:递归算法。注意边界条件并且一步步缩小范围。
public class Solution {
List<String> result = new ArrayList<>();
String[] digitToLetters = new String[]{"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public List<String> letterCombinations(String digits) {
if (digits.length() == 0 ) return result;
dfs(digits,new StringBuilder());
return result;
}
void dfs(String digits,StringBuilder stringBuilder){
if (digits.length()==0) {
result.add(stringBuilder.toString());
return;
}
int digit = digits.charAt(0) - '0';
digits = digits.substring(1);
for (int i = 0 ;i<digitToLetters[digit-2].length();i++) {
dfs(digits, stringBuilder.append(digitToLetters[digit - 2].charAt(i)));
stringBuilder.deleteCharAt(stringBuilder.length()-1);
}
}
}