首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应

2021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应

原创
作者头像
福大大架构师每日一题
修改2021-02-18 10:25:29
修改2021-02-18 10:25:29
6690
举报

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

福哥答案2021-02-17:

自然智慧即可。

1.递归。有代码。

2.动态规划。有代码。

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

代码语言:txt
复制
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]
}

执行结果如下:

图片
图片

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档