Given a string containing digits from 2-9 inclusive, 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. Note that 1 does not map to any letters.
Example:
Input: "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.
思路:回溯法
backtrack(combination, nextdigits)
两个参数分别表示正在组合的字符串和欲组合的数字索引
-
如果有数字需要去组合
-
遍历这个数字对应的字符串
- 将当前字母追加到当前正在组合的字符串comb
- 调用自己本身,继续下一个字母
backtrack(comb+letter,nextdigits.substring(1))
-
package com.Ryan;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class LetterCombinationsofaPhoneNumber {
public static void main(String[] args) {
LetterCombinationsofaPhoneNumber letterCombinationsofaPhoneNumber=new LetterCombinationsofaPhoneNumber();
String digits="23";
System.out.println(letterCombinationsofaPhoneNumber.letterCombinations(digits));
}
HashMap<String, String> phone=new HashMap<String, String>() {
{
put("2", "abc");
put("3", "def");
put("4", "ghi");
put("5", "jkl");
put("6", "mno");
put("7", "pqrs");
put("8", "tuv");
put("9", "wxyz");
}
};
List<String> result=new ArrayList<String>();
public void backtrack(String comb,String nextdigits) {
if (nextdigits.length()!=0) {
String digit=nextdigits.substring(0, 1);
String letters=phone.get(digit);
for (int i = 0; i < letters.length(); i++) {
String letter=letters.substring(i, i+1);
backtrack(comb+letter, nextdigits.substring(1));
}
}
else {
result.add(comb);
}
}
public List<String> letterCombinations(String digits) {
if (digits.length() != 0)
backtrack("", digits);
return result;
}
}