91. 解码方法
程序员文章站
2022-07-05 14:50:30
...
先不说为啥我写了一个空间复杂度为n的,就说说我之前做过这道题为啥这回还是出了问题。
这个绑定到概念我理解的不是很好。绑定不是说给前面到数字上个标志位,变成二维vector,而是说选择加往前数几位的数字。
这回我就没再写递归。因为如果你也是顺着动态规划一步一步过来的,这道题自然而然就能想出dp了,不用递归了。
int numDecodings(string a)
{
if(0==a.length())
return 0;
if('0'==a[0])
return 0;
vector<int>bp((int)a.length(),0);
bp[0]=1;
if(1==a.length())
return 1;
for(int i=1;i<(int)a.length();++i)
{
if('0'==a[i])
{
if(a[i-1]!='1' && a[i-1]!='2')
return 0;
else
{
if(1==i)
{
bp[i]=1;
}
else
{
bp[i]=bp[i-2];
}
}
}
else
{
if(a[i-1] == '1' || ('2'==a[i-1] && a[i]<='6'))
{
if(1==i)
bp[i]=2;
else
bp[i]=bp[i-1]+bp[i-2];
}
else
{
bp[i]=bp[i-1];
}
}
}
return *(bp.end()-1);
}
上一篇: 鞭辟入里,幽默有道理