利用搜索的方法求解....实际上只要确定前两个数字就可以确定整个序列....那么我们不妨便利前两个数字的所有合法组合,判断这个序列是否存在....
通过对两个数字搜索范围的剪枝可以加快效率,使用三个数字first, second, third代表前三个数在字符串中的起始坐标,first恒定为0;
public class Solution {
public boolean isAdditiveNumber(String num) {
int len=num.length();
int first=0,second=0,third=0;
if( len<3 )
{
return false;
}
for(second=1;second-first<=len/2;second++ )
{
if( num.charAt(first)=='0'&&second-first>1 )
{
break;
}
for(third=second+1;len-third>=Math.max(second,third-second);third++)
{
if( num.charAt(second)=='0'&&third-second>1 )
{
break;
}
int tmpFirst=first,tmpSecond=second,tmpThird=third;
while( tmpThird<len )
{
Long longFirst=Long.parseLong( num.substring(tmpFirst,tmpSecond) );
Long longSecond=Long.parseLong( num.substring(tmpSecond,tmpThird) );
Long sum=longFirst+longSecond;
if( num.substring(tmpThird).startsWith(sum.toString()) )
{
tmpFirst=tmpSecond;
tmpSecond=tmpThird;
tmpThird+=sum.toString().length();
}
else
{
break;
}
}
if( tmpThird==len )
{
return true;
}
}
}
return false;
}
}