当前位置: 首页 > news >正文

深圳网站制作hi0755广东石油化工建设集团公司网站

深圳网站制作hi0755,广东石油化工建设集团公司网站,深圳创新创业大赛,用jsp做的二手交易网站[动态规划] (四) LeetCode 91.解码方法 91. 解码方法 题目解析 (1) 对字母A - Z进行编码1-26 (2)11106可以解码为1-1-10-6或者11-10-6, 但是11-1-06不能解码 (3) 0n不能解码 (4) 字符串非空,返回解码方法的总数 解题思路 状态表示 dp[i]:以i为结…

[动态规划] (四) LeetCode 91.解码方法

91. 解码方法

image-20231103192610042

题目解析

(1) 对字母A - Z进行编码1-26

(2)11106可以解码为1-1-10-6或者11-10-6, 但是11-1-06不能解码

(3) 0n不能解码

(4) 字符串非空,返回解码方法的总数

解题思路
状态表示

dp[i]:以i为结尾,的解码方法

状态转移方程

1.单独解码

  • dp[i]与dp[i-1]分别解码:s[i]解码成功,即加上dp[i-1];解码失败,则这种方法以及之前的解码方法dp[i-1]是错误的,方法数0

2.组合解码

  • dp[i]与dp[i-1]组合:s[i-1] * 10 + s[i],解码成功,即加上dp[i-2];解码失败,则到dp[i-2]的方法是错误的,方法数0
初始化和填表顺序
  • 初始化

我们使用了i-1i-2的值,所以初始化dp[0]和dp[1]。

dp[0]与s[0]有关

dp[1]与s[1]有关,还与s[0]与s[1]的组合有关

dp[0] = s[0] != '0';
if(dp[1] != '0') dp += dp[0];
if(dp[0] != '0' && dp[1] != '0') dp[1] += dp[0];
int sum = ((dp[0] - '0') * 10 + (dp[1] - '0'));
if(sum >= 10 && sum <= 26) dp[1] += 1;
  • 填表顺序

从左往右填表

返回值

返回n-1位置即可,同状态表示

代码实现
class Solution {
public:int numDecodings(string s) {//构建dp数组int n = s.size();vector<int> dp(n);//初始化if(s[0] != '0') dp[0] = 1;//单独解码if(n == 1) return dp[0];if(s[0] != '0' && s[1] != '0') dp[1] += dp[0];//单独解码int sum = (s[0] - '0') * 10 + s[1] - '0';if(sum >= 10 && sum <= 26) dp[1]++;//组合解码//填表for(int i = 2; i < n; i++){//情况1if(s[i] != '0') dp[i] += dp[i-1];//情况2sum = (s[i-1] - '0') * 10 + s[i] - '0';if(sum >= 10 && sum <= 26) dp[i] += dp[i-2];}//返回结果return dp[n-1];}
};

image-20231103194639683

总结

细节1:字符串中数字进行±*/需要减一个字符0。

细节2:数据范围,字符串长度为1时直接返回dp[0]

细节3:初始化dp[1]时的代码与填表时的代码高度重合,我们可以进行优化

优化方法

1.将申请的空间扩大一位,将填表的下标向后推一位。

2.dp[0]初始化为1,dp[0]为我们虚构出来的一位;因为我们想要使i=2,dp[i]初始化正确,会访问到dp[i-2]。如果dp[0]为0,在计算组合的情况时,就会少加一次dp[i-2]。

3.因为我们把申请的空间dp,填表下标向后推一位,访问字符串s的下标得前进一位,则循环中s[i]的i都得减1

4.将填表的下标向后推一位,返回值也得向后推一位,即dp[n]。

优化代码
class Solution {
public:int numDecodings(string s) {//优化代码int n = s.size();vector<int> dp(n+1);dp[0] = 1;dp[1] = s[0] != '0';if(n == 1) return dp[1];for(int i = 2; i <= n; i++){if(s[i-1] != '0') dp[i] += dp[i-1];int sum = ((s[i-2] - '0') * 10) + (s[i-1] - '0');if(sum >= 10 && sum <= 26) dp[i] += dp[i-2];}return dp[n];}
};

image-20231103195008881

http://www.yayakq.cn/news/146728/

相关文章:

  • 郑州市重点项目建设办公室网站国外设计网站及介绍
  • 成都明腾网站建设公司平台网站开发是什么意思
  • 建个网站需要多少钱? 知乎网站建设如何开票
  • 重庆住建厅网站官网石家庄市做网站
  • 风险网站如何解决办法网站内容维护
  • 龙华做网站联系电话网站 风格
  • 高端的网站制作wordpress评论小工具
  • 一个完整的网站制作流程h5网站开发培训机构
  • 新乡网站设计公司开源中国
  • 怎么做网站点击率监控工具河北京电电力建设有限公司网站
  • 网站建设系统哪家好唐山市住建局官方网站
  • 邢台网站设计哪家好比价网站开发
  • 网站开发流程的8个步骤营业执照官网申请入口
  • php做网站需要学的东西做网站需要了解
  • 保定行业网站qq网页即时聊天
  • docker.io wordpress如何优化网站排名
  • 学校网站制作平台网站后台管理方便吗
  • 企业网站seo策略PHP网站开发如何建立vip
  • 湛江网站建设服务超级门户博客版wordpress主题
  • 建立平台网站要多久wordpress自定义新页面链接
  • 大型网站制作报价福州专业网站建设怎么做
  • 做网站初始配置wordpress站内全文检索
  • 网站运营管理办法wordpress前端页面存放
  • 新建网站做优化wordpress模板图片不显示
  • 权重6网站怎么做打开网站说建设中是什么问题?
  • 做网站和appwordpress搭建公司网站
  • 做网站自动上传文章网站建设公司营业执照经营范围
  • 各大网站博客怎么做推广广州现在可以正常出入吗
  • 网站站内链接怎么做seo快速排名软件首页
  • 中国建设积分商城网站网站开发保密协议书