动态规划04数字转变为字符串结果数

本文探讨了将数字字符串通过1-A-Z的映射规则转化为不同字母组合的方法,分别介绍了暴力递归和动态规划两种算法。递归函数process通过回溯实现,而动态规划利用dp表减少了重复计算。重点在于处理0的特殊性及多位数的选择策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

规定1和A对应、2和B对应、3和C对应…26和Z对应
那么一个数字字符串比如"111”就可以转化为:
“AAA”、“KA"和"AK”
给定一个只有数字字符组成的字符串str,返回有多少种转化结果

暴力递归

构建尝试函数,str为数字字符串,index为当前进行到哪个位置,返回值为当前转换结果数

主函数中如何调用process(str,index)

分析basecase

当index==str的长度时,到达字符串的尾部,返回数字1,表示找到一种转换结果

分析普通情况

当index遇到的字符为0,因为没有以0开始的数字串对应的字母,则说明之前选择是错误的,直接返回0。

若index遇到的字符是3-9,直接读取一位

若index遇到的是1-2的时候,可以选一位,也可以选两位,选择两位的时候要判断是否在10到26之间

总结一下:

当index遇到0 直接返回0表示之前做的决定是错误的

index选择一位的情况

index选择两位的情况,需要判断下一位是否存在并且两位的值应该小于27,若满足条件,则可以继续。

int process(string& str, int index) {
   
    if (index == str.size()) {
   
        return 1;
    }
    if (str[index] == '0&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值