假设我们有一个数字到字母表的映射:
1-> ['a', 'b', 'c]
2-> ['d’, 'e’]
3- ['f', 'g', "h]
实现一个函数,对于给定的一串数字,例如"1". "233",返回一个包含所有可能的组合的字符串列表
package main import ( "fmt" ) func main() { ret := letterConbination("3122") fmt.Println(ret) } var numMap = map[string][]string{ "1": {"a", "b", "c"}, "2": {"d", "e"}, "3": {"f", "g", "h"}, } func letterConbination(nums string) (ret []string) { c := string(nums[0]) letterMap := numMap[c] retconb := make([]string, 0) if len(nums) > 1 { retconb = letterConbination(string(nums[1:])) } for _, letter := range letterMap { if len(nums) > 1 { for _, conb := range retconb { a := letter + conb ret = append(ret, a) } } else { ret = append(ret, letter) } } return }
对于固定长度且长度较小的可以用多个for生成组成,对于本题这种不固定长度的要用递归来生成