典型的动态规划题,和《剑指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 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;i20)33 return 0;34 iv[i]=iv[i-2];35 flag=1;36 }37 else38 {39 if(flag==1)40 {41 iv[i]=iv[i-1];42 }43 else44 {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 };