本文为senlie原创,转载请保留此地址:
Total Accepted: 8689 Total
Submissions: 55465
A message containing letters from <code>A-Z</code> is
being encoded to numbers using the following mapping:
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message <code>"12"</code>, it could be decoded as <code>"AB"</code> (1
2) or <code>"L"</code> (12).
The number of ways decoding <code>"12"</code> is
2.
题意:将A-B编码为1-26,现在给一串数字,问有多少种解码方式
思路:动态规划
设f[i]表示以第i个字符结尾的数字串的解码方式,则
如果 s[i - 2]是1 或 s[i - 2]是2且s[i - 1]小于6,f[i] = f[i - 1] + f[i - 2]
否则,f[i] = f[i - 1]
此外,还要再加一些判断
如果s[i - 1]是零,则以s[i - 2]数字结尾的解码方式为零。因为s[i - 2]数字必须和s[i - 1]结合起来
实现的时候只要两个变量保存前两个的值,即f[i - 1]和f[i - 2]
注:动态规划,除了那些最后要从所有的f[i]中选出最大最小值的问题,
都只需要用几个变量保存前几个值即可。这样实现不仅省空间,而且不用担心
下标越界
--》其实即使是要求最值的问题,也可以用一个变量表示当前最值,然后在循环中每次更新
复杂度:时间O(n), 空间O(1)