欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);

}