java1-26对应a-z,2021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应,那么一个数字字符串比如"11...

2021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应,那么一个数字字符串比如"111”就可以转化为:"AAA"、"KA"和"AK"。给定一个只有数字字符组成的字符串str,请问有多少种转化结果?

福哥答案2021-02-17:

自然智慧即可。

1.递归。有代码。

2.动态规划。有代码。

代码用golang编写,代码如下:package main

import "fmt"

func main() {

str := "7210231231232031203123"

fmt.Println("1.递归:", number1(str))

fmt.Println("2.动态规划:", number2(str))

}

func number1(str string) int {

if len(str) == 0 {

return 0

}

return process1(str, 0)

}

func process1(str string, index int) int {

strLen := len(str)

if strLen == index { //1

return 1

}

if str[index] == '0' {

return 0

}

ret := process1(str, index+1)

if index+1 < strLen && (str[index] == '1' || (str[index] == '2' && str[index+1] <= '6')) {

ret += process1(str, index+2)

}

return ret

}

func number2(str string) int {

strLen := len(str)

if strLen == 0 {

return 0

}

dp := make([]int, strLen+1)

dp[strLen] = 1 //1

for i := strLen - 1; i >= 0; i-- {

if str[i] == '0' {

continue

}

dp[i] = dp[i+1]

if i+1 < strLen && (str[i] == '1' || (str[i] == '2' && str[i+1] <= '6')) {

dp[i] += dp[i+2]

}

}

return dp[0]

}

执行结果如下:

1460000039218844

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值