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

动态规划-91.解码方法-力扣(LeetCode)

一、题目解析

 将对应字符转化为数字,我们知道有的大写字母范围是在[1,9],剩下的则是[10,26],这个对应关系使我们解题的关键。

二、算法原理

1.状态表示

dp[i]表示:以i位置为结尾时,解码方法总数

2.状态转移方程

根据最近的一步划分问题

 3.初始化

根据状态转移方程,我们需要对dp[0]和dp[1]初始化,对于dp[0]只有1或0两种可能,而dp[i]则有三种可能0,1,2,还需要注意处理越界问题,在跑示例的时候会遇到的,这里不做过多赘述。

4.填表顺序

为了计算dp[i]我们需要知道前一个位置和前两个位置的值,所以我们需要从左向右填表。

5.返回值

我们状态表示定义dp[i]表示:以i位置为结尾,解码方法的总方法数,所以返回dp[n-1],这里的n是给定string的长度

老规矩,根据上面的原理自己实现,链接:91. 解码方法 - 力扣(LeetCode)

三、代码示例

class Solution {
public:int numDecodings(string s) {int n = s.size();vector<int> dp(n);dp[0] = (s[0] - '0') >= 1 && (s[0] - '0') <= 9 ? 1 : 0;//处理dp[0]if(n<2) return dp[0];//当n<2时下面操作会越界,所以直接返回dp[0]if(((s[0] - '0') >= 1 && (s[0] - '0') <= 9) && ((s[1]-'0') >=1 && (s[1]-'0') <=9) ) dp[1] += 1;else dp[1] += 0;if(((s[0] - '0')*10 + (s[1] - '0')) >=10 && ((s[0] - '0')*10 + (s[1] - '0')) <=26)//判断s[0]+s[1]能否解码dp[1] += 1;else dp[1] += 0; for(int i = 2;i<n;i++){if((s[i] - '0') >= 1 && (s[i] - '0') <= 9) dp[i] += dp[i-1];else dp[i] += 0;if(((s[i-1] - '0')*10 + (s[i] - '0')) >=10 && ((s[i-1] - '0')*10 + (s[i] - '0')) <=26)dp[i] += dp[i-2];else dp[i] += 0; }//if(dp[0] == 0) return 0;return dp[n-1];}
};

 看到最后,如果对您有帮助还请点赞和收藏,我们下期再见!

相关文章:

  • SPSS系统发育分析中的聚类相关part
  • 端口安全讲解
  • 《Python星球日记》 第44天: 线性回归与逻辑回归
  • 轻松管理房间预约——启辰智慧预约小程序端使用教程
  • 【图书管理系统】详细讲解用户登录:后端代码实现及讲解、前端代码讲解
  • feign负载均衡
  • 4.系统定时器基本定时器
  • 当“信任”遇上“安全”:如何用Curtain Logtrace记录文件操作活动 守护团队与数据的双重底线?
  • 从Huggingface下载模型的方法小结
  • 如何从路由表优化的角度理解[CIDR]无类别域间路由选择技术?
  • 针对Mkdocs部署到Githubpages加速访问速度的一些心得
  • 2021年下半年试题四:论微服务架构及其应用
  • Spring AI 之 AI核心概念
  • 2025年渗透测试面试题总结-渗透岗位全职工作面试(附回答)(题目+回答)
  • SWiRL:数据合成、多步推理与工具使用
  • 前端代码规范详细配置
  • QT:qt5调用打开exe程序并获取调用按钮控件实例2025.5.7
  • 2025年高校辅导员考试高频考点有哪些?
  • qsort函数
  • Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
  • 10名“鬼火少年”凌晨结队在城区飙车,警方:涉非法改装,正处理
  • 印度32座机场暂停民用航班运营,印称在边境多处发现无人机
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 本周看啥|喜欢二次元的观众,去电影院吧
  • 中方就乌克兰危机提出新倡议?外交部:中方立场没有变化
  • 明明睡够了,怎么还有黑眼圈?可能是身体在求救