题目描述[原题链接][https://leetcode-cn.com/problems/decode-ways/]
一条包含字母 A-Z
的消息通过以下方式进行了编码:
1 | 'A' -> 1 |
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1:
1 | 输入: "12" |
示例 2:
1 | 输入: "226" |
算法描述
分三种情况讨论:
- `s[i]=='0'`时,`s[i-1]=='1'`或`s[i-1]=='2'`时,`dp[i]=dp[i-2]`,否则`return 0`;
- `s[i-1]=='1'`时,`dp[i]=dp[i-1]+dp[i-2]`;
- `s[i-1]=='2'`并且`s[i]>='1'&&s[i]<='6'`此时`dp[i]=dp[i-1]+dp[i-2]`;
分析可知,结果只和前两项有关,所以空间复杂度可以从O(n)
降到O(1)
;
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |