解题思路
回溯法解决。
每个数字都对应三(四)种字母情况,于是分别尝试它们,当字符串长度为数字字符串长度时就可以加入到res数组中了。注意需要回溯digits。
AC代码
func letterCombinations(digits string) (res []string) {
if digits==""{
return res
}
m:=map[string][]string{
"2":[]string{"a","b","c"},
"3":[]string{"d","e","f"},
"4":[]string{"g","h","i"},
"5":[]string{"j","k","l"},
"6":[]string{"m","n","o"},
"7":[]string{"p","q","r","s"},
"8":[]string{"t","u","v"},
"9":[]string{"w","x","y","z"},
}
var DFS func(string)
DFS=func(str string){
if digits==""{
res=append(res,str)
return
}
digit:=digits[:1]
digits=digits[1:]
for i:=0;i<len(m[digit]);i++{
DFS(str+m[digit][i])
}
digits=digit+digits
}
DFS("")
return res
}
感悟
emmmm,感觉Go的字符串不能像C++一样取下标为i的字符很难受,完全得当做切片对待。