题解 | #把数字翻译成字符串#

把数字翻译成字符串

https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668

2022.0816算法第32题把数字翻译成字符串
这题也是采用动态规划进行求解,但是状态转移方程就不是特别好想了。
1、状态矩阵
dp表示字符串i个位置可能的翻译方法。
vector<int> dp(nums.size()+1,1);
2、初始状态
初始状态需要考虑的比较多,
dp[0]=1,dp[1]=1;
if(nums=="0")
    return 0;
if(nums=="10"||nums=="20")
    return 1;
for(int i=1;i<nums.size();i++){
    if(nums[i]=='0'&&nums[i-1]!='1'&&nums[i-1]!='2')
        return 0;
}
3、状态转移方程
这个状态转移方程也是比较复杂,情况比较多,需要考虑的很细,要确保数字在11-19和21-26之间,包括两边.
if((nums[i-2]=='1'&&nums[i-1]!='0')||
   (nums[i-2]=='2'&&nums[i-1]>'0'&&nums[i-1]<'7')){
    dp[i]=dp[i-1]+dp[i-2];
}
else{
    dp[i]=dp[i-1];
}
我刚开始没想到需要和前两项构成关系,只考虑前一项是不行的。
第i项的值,在满足数字在11-19和21-26之间时,为
dp[i-1]+dp[i-2]
主要就是这时候需要考虑两种情况。
但不满足11-19和21-26之间时,
dp[i]=dp[i-1];
情况就不会变多。
觉着挺难的。



#算法题#
全部评论

相关推荐

今天 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
头像
今天 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务