package main var mBtn = map[byte][]string{ '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"}, } func letterCombinationsIter(digits string, last []string) []string { if len(digits) == 0 { return last } res := make([]string, 0) char := mBtn[digits[0]] for _, v := range last { for _, c := range char { res = append(res, v+c) } } return letterCombinationsIter(digits[1:], res) } func letterCombinations(digits string) []string { if len(digits) == 0 { return []string{} } return letterCombinationsIter(digits[1:], mBtn[digits[0]]) } /* func main() { fmt.Println(letterCombinations("23")) fmt.Println(letterCombinations("234")) } */