题目:
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding "12"
is 2.
思路2,为了简化时间复杂度,我们采用动态规划的方法。例如,当我们知道了n-2长度的字符串能够解释的数目以及n-1长度的字符串能够解释的数目时,我们可以判读如下两个条件:
1)若第n个字符在1到9之间,则n长度的字符串能够解释的数目包含n-1长度字符串能够解释的数目。
2)若第n-1个字符与第n个字符可以解释为一个字母时,则n长度的字符串能够解释的数目包含n-2长度字符串能够解释的数目。
代码:
思路1:
- class Solution {
- public:
- int count;
- int numDecodings(string s) {
- if(s.size()==0)
- {
- return 0;
- }
- count=0;
- Decode(s,0,0);
- return count;
- }
- void Decode(string s, int begin, int end)
- {
- if(begin>=s.size())
- {
- count++;
- }
- else if(end>=s.size())
- {
- return;
- }
- else
- {
- int num=0;
- for(int i =begin;i<=end;i++)
- {
- num*=10;
- num+=s[i]-'0';
- }
- if(num>=1&&num<=26)
- {
- Decode(s,end+1,end+1);
- }
- if(num>=1&&num<=2)
- {
- Decode(s,begin,end+1);
- }
- }
- }
- };
思路2
- class Solution {
- public:
- int numDecodings(string s) {
- if(s.size() == 0){
- return 0;
- }
- else if(s.size() == 1){
- return s[0] != '0' ? 1 : 0;
- }
- else if(s.size() == 2){
- return (s[0] != '0' && s[1] != '0'? 1 : 0) + ((s[0] != '0' && (char2int(s[0]) * 10 + char2int(s[1])) <= 26) ? 1 : 0);
- }
- int* dp = new int[s.size()];
- dp[0] = s[0] != '0' ? 1 : 0;
- dp[1] = (s[0] != '0' && s[1] != '0'? 1 : 0) + ((s[0] != '0' && (char2int(s[0]) * 10 + char2int(s[1])) <= 26) ? 1 : 0);
- for(int i = 2; i < s.size(); i++){
- dp[i] = 0;
- if(s[i] != '0'){
- dp[i] += dp[i-1];
- }
- if(s[i-1] != '0' && (char2int(s[i-1]) * 10 + char2int(s[i])) <= 26){
- dp[i] += dp[i-2];
- }
- }
- return dp[s.size() - 1];
- }
- int char2int(char c){
- return c - '0';
- }
- };
相关推荐
java java_leetcode题解之Decode Ways.java
java java_leetcode题解之Decode Ways II.java
"DEcode Ways"是LeetCode中的第91题,它涉及到字符串处理和动态规划的算法知识。下面将详细讨论这个题目以及如何使用JavaScript来解决它。 解题思路: 问题描述:给定一个只包含大写字母的非空字符串s,已知每个...
python python_leetcode题解之091_Decode_Ways
c语言基础 c语言_leetcode题解之0091_decode_ways.zip
javascript js_leetcode题解之91-decode-ways.js
例如,著名的“解码方法”问题(Decode Ways)就要求计算给定的数字编码有多少种可能的解码方式,这需要对动态规划有深入的理解。 在解决LeetCode的解码问题时,关键在于理解编码的逻辑,然后选择合适的数据结构和...
leetcode 分类 LeetCode Progress 128/154 Other Solutions C++,有详细思路解释 ...Decode Ways Palindrome Partitioning II Maximal Rectangle ###Recursion N-Queens N-Queens II Balanced Binary Tree Binar
leetcode怎么计算空间复杂度是指 LeetCode-Solution my first solution of LeetCode 2015-5-7 Problem 95,98(80 ...我经常在递归的结束地方忘记return!...091:Decode Ways 简单的一维DP,用额外数组O(n)即可。 139,1
扩展矩阵leetcode interview-algorithm leetCode 待解决 上楼梯问题 how many ways to decode this message @leetCode 91
leetcode 【演示记录】 报告 展示 2017/03/06 1.二和,167.二和二 2107/03/06 15.3 总和,16.3 总和最近,18.4 总和,11.最多水的容器 2017/03/09 62.Unique Paths, 63.Unique Paths II, 64.Minimum Path Sum 2017/...
Ways](./leetcode/动态规划-Decode Ways.java) [动态规划-Distinct Subsequences](./leetcode/动态规划-Distinct Subsequences.java) [动态规划-Longest Valid Parentheses](./leetcode/动态规划-Longest Valid ...