LeetCode91. Decode Ways
来源:互联网 发布:淘宝怎么退款退货 编辑:程序博客网 时间:2024/06/07 02:12
题目链接:
https://leetcode.com/problems/decode-ways/
题目描述:
求一个数字字符串的有多少编码方式。
题目分析:
嗯,一开始用递归去做超时了,应该是找递推式,动态规划。
dp[i]代表对于字符串下标i(即字符串0~i)时的编码方式。
1.当s[i]=0时,s[i-1]=1或s[i-1]=2,否则编码无效返回0。
dp[i]=dp[i-2]。此时应该将s[i-1]s[i]一起看,i位置的编码方式由i-2位置决定。
2.当s[i-1]=1或s[i-1]=2且s[i]在1~6时。编码方式有两种分开看,一起看。17(1 7,17)
dp[i]=dp[i-1]+dp[i-2]。
3.其他情况时 dp[i]=dp[i-1]
因为i-2所以,第1,2个字符特殊处理。
代码:
class Solution {public: int numDecodings(string s) { if (s == "" || s[0] == '0'){ return 0; } int len = s.size(); vector<int> dp(len , 0); dp[0] = 1; dp[1] = 1; if (len >= 2){ string ss = s.substr(0,2); if(s[1]=='0'){ if(s[0]=='1' || s[0]=='2'){ dp[1]=1; } else{ return 0; } } else if(ss >= "11" && ss <= "26"){ dp[1]=2; } } for (int i = 2; i < len; i++){ if (s[i] == '0'){ if (s[i - 1] == '1' || s[i - 1] == '2'){ dp[i] = dp[i - 2]; } else{ return 0; } } else if (s[i-1]=='1' || s[i-1]=='2' && s[i] >= '1' && s[i] <= '6'){ dp[i]=dp[i-1]+dp[i-2]; } else{ dp[i] = dp[i - 1]; } } return dp[len-1]; }};
0 0
- LeetCode91:Decode Ways
- LeetCode91. Decode Ways
- leetcode91. Decode Ways
- LeetCode91 Decode Ways
- LeetCode91——Decode Ways
- leetcode91-Decode Ways(有限制条件的斐波那契数列)
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- PHP判断当前是否utf-8
- Android 常用参考文档
- SoapUI命令行方式运行
- 极光IM简单的聊天测试
- 基于STM8的小型操作系统
- LeetCode91. Decode Ways
- PHP检查是否BOM头
- SoapUI对于Json数据进行属性值获取与传递
- 每天学一点linux(9)--文件与目录的默认权限与隐藏权限
- soapUI(groovy脚本作用1)请不要问为什么系列1
- android lrucache使用
- 读书笔记 之 设计模式
- bash变量简介-56
- 日期 前后多少分钟