LC91 Decode Ways

典型的动态规划题,和《剑指offer》中的矩形覆盖题相似,只不过要考虑不同的边界情况。

另外对于《剑指offer》中的矩形覆盖题,值得考虑的是当矩形是n*n时,会有多少种覆盖的情况?

 1 class Solution {
 2 public:
 3     int numDecodings(string s) {
 4         if(s==""||s[0]=='0')
 5             return 0;
 6         if(s.length()==1&&s[0]!='0')
 7             return 1;
 8         if(s.length()>=2&&s[1]=='0')
 9         {
10             if((s[0]-'0')*10+s[1]-'0'>20)
11                 return 0;
12         }
13         int len=s.length();
14         vector<int> iv(len,0);
15         int flag=0;
16         if(s[0]!='0'&&s[1]!='0')
17         {
18             iv[0]=1;iv[1]=1;
19             if((s[0]-'0')*10+s[1]-'0'<=26)
20                 iv[1]++;
21         }
22         else if(s[0]!='0'&&s[1]=='0')
23         {
24             iv[0]=1;iv[1]=1;flag=1;
25         }
26         for(int i=2;i<len;i++)
27         {
28             if(s[i]=='0')
29             {
30                 if(flag==1)
31                     return 0;
32                 if((s[i-1]-'0')*10+s[i]-'0'>20)
33                     return 0;
34                 iv[i]=iv[i-2];
35                 flag=1;
36             }
37             else
38             {
39                 if(flag==1)
40                 {
41                     iv[i]=iv[i-1];
42                 }
43                 else
44                 {
45                     iv[i]=((s[i-1]-'0')*10+s[i]-'0'<=26)?(iv[i-1]+iv[i-2]):iv[i-1];
46                 }
47                 flag=0;
48             }
49         }
50         return iv[len-1];
51     }
52 };
View Code

 

posted @ 2016-04-01 20:10  vaevaevae  阅读(224)  评论(0编辑  收藏  举报