按照9键电话号码输出符合条件的组合
// 9键,数字字符串能够转换的字母组合
func ChangeNumToCombination(digits string) []string {
// “23”,宽度是“abc”,深度是2
if len(digits) == 0 {
return []string {}
}
numMap := map[string]string{
"2": "abc",
"3": "def",
"4": "ghi",
"5": "jkl",
"6": "mno",
"7": "pqrs",
"8": "tuv",
"9": "wxyz",
}
var res []string
var pre []string
var in func(n string, s int)
in = func(num string, startIndex int) {
n := len(num)
// 终止条件
if len(pre) == n {
tmp := strings.Join(pre, "")
res = append(res, tmp)
return
}
// 遍历,宽度为n,递归时宽度参数变化为k+1,而不是startIndex+1
for k := startIndex; k < n; k++ {
s := numMap[string(num[k])]
for i := 0; i < len(s); i++ {
pre = append(pre, string(s[i]))
in(num, k+1)
// 回溯
pre = pre[:len(pre)-1]
}
}
}
in(digits, 0)
return res
}