解题思路
记忆化搜索,记录已经计算过的子问题
代码
func numDecodings(s string) int {
temp:=make([]int,len(s),len(s))
for i := range temp {
temp[i]=-1
}
return de(s,0,temp)
}
func de(s string,cur int,dp []int) int {
if cur==len(s){
return 1
}
if dp[cur]!=-1{
return dp[cur]
}
res,res1:=0,0
if cur+1 <= len(s) {
atoi, _ := strconv.Atoi(s[cur : cur+1])
if atoi>0 {
res=de(s,cur+1,dp)
}
}
if cur+2<=len(s){
atoi, _ := strconv.Atoi(s[cur : cur+2])
if atoi>0 {
res1=de(s,cur+1,dp)
}
}
dp[cur]=res+res1
return dp[cur]
}