这道题感觉好烦,,
class Solution {
public:
bool valid(int start, int i, int j, string num)
{
string a=num.substr(start,i);
string b=num.substr(start+i,j);
if((a[0]=='0' && a.size()>1) ||(b[0]=='0' && b.size()>1)) return false;//去个特例
string c=add(a,b);
if(c.size()+start+i+j>num.size() || c!=num.substr(start+i+j,c.size())) return false;
if(c.size()+start+i+j==num.size()) return true;
return valid(start+i,j,c.size(),num);
}
string add(string a,string b)//两个数相加
{
int m=a.size(),n=b.size(),c=0;
string res;
while(m||n||c){
int x=0,y=0;
if(m)
x=a[--m]-'0';
if(n)
y=b[--n]-'0';
res=to_string((x+y+c)%10)+res;
c=(x+y+c)/10;
}
return res;
}
bool isAdditiveNumber(string num) {
if(num.size()<3)
{
return false;
}
for(int i=1;i<=num.size()/2;++i)
{
for(int j=1;j<=(num.size()-i)/2;++j)//改变数的长度
{
if(valid(0,i,j,num)) return true;
}
}
return false;
}
};