Decode Ways

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.

Subscribe to see which companies asked this question

 
一开始理解错了,以为11可以是3种,其实是两种。
这题类似斐波那契数列
f(n)=f(n-1)+f(n-2);
不过这题是有条件的,要判断当所在位不为零,即是f(n-1),代表此次所得种类数不会增加,若为零,则不能这样拆,则这种情况不存在编码种类数。
 
 
 1 class Solution {
 2 public:
 3     int numDecodings(string s) {
 4     if(s.empty())
 5     return 0;
 6     if(s.size()==1)
 7     {
 8         if(s[0]=='0')
 9         return 0;
10         else return 1;
11     }
12         int tmp1=0,tmp2=1;
13         int len=s.size()-1;
14         if(s[len]!='0')
15         tmp1=1;
16         for(int i=len-1;i>=0;i--)
17         {
18             int res=0;
19            if(s[i]!='0')
20            res+=tmp1;
21            if(s[i]=='1'||(s[i]=='2'&&s[i+1]<='6'))
22            res+=tmp2;
23            tmp2=tmp1;
24            tmp1=res;
25         }
26         return tmp1;
27     }
28 };
原文地址:https://www.cnblogs.com/daocaorenblog/p/5365786.html