1 class Solution 
 2 {
 3 public:
 4     int numDecodings(string s) 
 5     {
 6         int len=s.length();
 7         if(len==0||s[0]=='0')
 8             return 0;
 9         if(len==1)
10             return 1;
11         int res=0,count2=1,count1=1;
12         for(int i=1;i<len;i++)
13         {
14             int cur=count1;
15             if(valids(s[i])&&validd(s[i-1],s[i]))           res=count1+count2;
16             else if(valids(s[i])&&!validd(s[i-1],s[i]))     res=count1;
17             else if(!valids(s[i])&&validd(s[i-1],s[i]))     res=count2;
18             else                                            return 0;
19             count2=cur;
20             count1=res;
21             res=0;
22         }
23         return count1;
24     }
25     
26     bool valids(char c)
27     {
28         return c!='0';
29     }
30     
31     bool validd(char a,char b)
32     {
33         return a=='1'||(a=='2'&&b<'7');
34     }
35 };

从头到尾扫描,和斐波那契上楼梯有点类似,问题不大

posted on 2018-08-07 16:04  高数考了59  阅读(168)  评论(0)    收藏  举报