Problem
Analysis Process
1.Iterate over the letter corresponding to the first number
2.A new letter is added to each number
3.Adds the combined letters to the result set code until the numeric string is empty
as shown in the figure
Code
golang
func backtrack(combination,digits string,phone map[byte]string,res[]string)[]string{
//if there is no more digits to check
if len(digits)==0{
// the combination is done
res = append(res,combination)
// if there are still digits to check
}else{
// iterate over all letters which map
// the next available digit
for _,v:=range(phone[digits[0]]){
res = backtrack(combination+string(v),digits[1:],phone,res)
} // append the current letter to the combination
// and proceed to the next digits
}
return res
}
func letterCombinations(digits string) []string {
phone:=map[byte]string{}
phone['2'] = "abc"
phone['3'] = "def"
phone['4'] = "ghi"
phone['5'] = "jkl"
phone['6'] = "mno"
phone['7'] = "pqrs"
phone['8'] = "tuv"
phone['9'] = "wxyz"
res:=[]string{}
if digits!=""{
res = backtrack("",digits,phone,res)
}
return res
}
java
class Solution {
Map<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> output = new ArrayList<String>();
public void backtrack(String combination, String next_digits) {
// if there is no more digits to check
if (next_digits.length() == 0) {
// the combination is done
output.add(combination);
}
// if there are still digits to check
else {
// iterate over all letters which map
// the next available digit
String digit = next_digits.substring(0, 1);
String letters = phone.get(digit);
for (int i = 0; i < letters.length(); i++) {
String letter = phone.get(digit).substring(i, i + 1);
// append the current letter to the combination
// and proceed to the next digits
backtrack(combination + letter, next_digits.substring(1));
}
}
}
public List<String> letterCombinations(String digits) {
if (digits.length() != 0)
backtrack("", digits);
return output;
}
}