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.
public class Letter_Combinations_Of_A_Phone_Number {
static Map<String,String> map = 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");
}
};
static List<String> output = new ArrayList<>();
public static void backTrack(String combinations, String next_digits)
{
if(next_digits.length() == 0)
{
output.add(combinations);
}
else
{
String digit = next_digits.substring(0,1);
String letters = map.get(digit);
for(int i = 0; i < letters.length();i++)
{
String letter = map.get(digit).substring(i,i+1);
backTrack(combinations+letter,next_digits.substring(1));
}
}
}
/**
* backTrack算法:利用递归:
* @param digits
* @return
*/
public static List<String> letterCombinations1(String digits)
{
if(digits != null ||digits.length() != 0)
{
backTrack("",digits);
}
return output;
}
/**
* 暴力破解:通过循环遍历所有的字符,然后再通过循环进行组合
* @param digits
* @return
*/
public static List<String> letterCombinations2(String digits)
{
String[] letters = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
List<String> result = new ArrayList<>();
if(digits == null) return result;
result.add("");
for(int i = 0; i < digits.length();i++)
{
result = Combine(letters[digits.charAt(i)-'0'],result);
}
return result;
}
public static List<String> Combine(String digit,List<String> list)
{
List<String> result = new ArrayList<>();
for(int i = 0; i < digit.length();i++)
{
// for(String s : list)
// {
// result.add(s+digit.charAt(i));
// }
for(int j = 0; j< list.size();j++)
{
result.add(list.get(j)+digit.charAt(i));
}
}
return result;
}
}