标签:
典型的动态规划题,和《剑指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 };
标签:
原文地址:http://www.cnblogs.com/vaecn/p/5346293.html