解码方法-LintCode
来源:互联网 发布:阿里云企业邮箱升级 编辑:程序博客网 时间:2024/06/06 02:40
有一个消息包含A-Z通过以下规则编码
'A' -> 1'B' -> 2...'Z' -> 26
现在给你一个加密过后的消息,问有几种解码的方式
样例:
给你的消息为12,有两种方式解码 AB(12) 或者 L(12). 所以返回 2。
思路:
动态规划,len为s的长度,取dp[],大小为len+1,且dp[0]=1,dp[1]=1;
处理len为1时的情况,s为”0”,返回0,其他返回1;
用num表示位于i-2和i-1位置所组成的数。
状态转换方程为:
若11<=num<=26 && num!=0
若num是10的倍数,
num是10或者20
其他情况,返回0;
除此情况外
#ifndef C512_H#define C512_H#include<iostream>#include<string>#include<vector>using namespace std;class Solution {public: /* * @param s: a string, encoded message * @return: an integer, the number of ways decoding */ int numDecodings(string &s) { // write your code here if (s.empty()) return 0; int len = s.size(); vector<int> dp(len + 1, 1); if (len == 1) return stoi(s) == 0 ? 0 : 1; for (int i = 2; i <= len; ++i) { int num = stoi(s.substr(i - 2, 2)); if (num <= 26&&num >= 11&&num!=20) { dp[i] = dp[i - 2] + dp[i - 1]; } else if (num % 10 == 0) { if (num == 10 || num == 20) dp[i] = dp[i - 2]; else { return 0; break; } } else dp[i] = dp[i - 1]; } return dp[len]; }};#endif
阅读全文
0 0
- lintcode, 解码方法
- LintCode: 解码方法
- lintcode(512)解码方法
- 解码方法-LintCode
- lintcode----解码方法
- lintcode decode-ways 解码方法
- LINTCODE——解码方法
- LintCode习题系列之解码方法
- 乱码的解码方法
- Base64 另一种解码方法
- 哈夫曼解码 -- huffmanDecoder方法
- base64编码解码方法
- FFmpeg 视频格式解码方法
- php base64_decode 解码方法
- base64编解码方法
- 图片解码方法
- 编码解码的方法
- 91字母解码方法
- JS-面向对象
- 李开复给中国大学生的七封公开信(其三)
- 一分钟了解负载均衡的一切
- Spring+SpringMVC+MyBatis实现数据库连接的登录功能
- 调用DllRegisterServer进行COM组件的注册
- 解码方法-LintCode
- 15.1.1访问文件和目录
- U-boot根目录下的mkconfig分析
- Ajax封装
- 类与对象的基础
- Redis 安装
- PHP MySQL insert
- 值得看的youtube频道
- 人工智能泡妞第一步 · 了解学科