转载请注明出处
Letter Combinations of a Phone Number
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.
package main
import (
"fmt"
)
func letterCombinations(digits string) []string {
if (len(digits)) == 0 {
return nil
}
AllDigits := map[byte][]string{
'0': {" "},
'1': {""},
'2': {"a", "b", "c"},
'3': {"d", "e", "f"},
'4': {"g", "h", "i"},
'5': {"j", "k", "l"},
'6': {"m", "n", "o"},
'7': {"p", "q", "r", "s"},
'8': {"t", "u", "v"},
'9': {"w", "x", "y", "z"},
}
var cur string
answer := make([]string, 0)
dfs(digits, AllDigits, 0, cur, &answer)
fmt.Println(answer)
return answer
}
func dfs(digits string, AllDigits map[byte][]string, l int, cur string, answer *[]string) {
if l == len(digits) {
*answer = append(*answer, cur)
return
}
for _, n := range AllDigits[byte(digits[l])] {
cur = cur + n
dfs(digits, AllDigits, l+1, cur, answer)
cur = cur[:int(len(cur)-1)]
}
}