public class Solution {
public boolean isAdditiveNumber(String num) {
if(num==null ||num.length()<3)
return false;
int len=num.length();
for(int i=0;i<len-2;i++)
{
if(num.charAt(0)=='0'&&i>=1) //若第一位是0,则第一个数只能截取0,不能 01,00,这种。
break;
for(int j=i+1;j<len-1;j++)
{
if(num.charAt(i+1)=='0' && j-i>=2) // 例如“101123” 当i=0时,若i+1位置为0,第二个字符串就只能截取0,若j-i>=2,就违规了
break; // i j
String s1=num.substring(0,i+1); //截取的是[0,i]位置的字符串。
String s2=num.substring(i+1,j+1); //截取的[i+1,j]位置的字符串。
String s3=num.substring(j+1); //剩余的字符串
if(isValid(s1,s2,s3))
return true;
}
}
return false;
}
public boolean isValid(String s1,String s2,String str)
{
if(str.equals(""))
return true;
long tmp=Long.valueOf(s1)+Long.valueOf(s2);
String tmp1=String.valueOf(tmp);
int len =tmp1.length();
if(str.startsWith(tmp1)&&isValid(s2,tmp1,str.substring(len)))
return true;
return false;
}
}
public boolean isAdditiveNumber(String num) {
if(num==null ||num.length()<3)
return false;
int len=num.length();
for(int i=0;i<len-2;i++)
{
if(num.charAt(0)=='0'&&i>=1) //若第一位是0,则第一个数只能截取0,不能 01,00,这种。
break;
for(int j=i+1;j<len-1;j++)
{
if(num.charAt(i+1)=='0' && j-i>=2) // 例如“101123” 当i=0时,若i+1位置为0,第二个字符串就只能截取0,若j-i>=2,就违规了
break; // i j
String s1=num.substring(0,i+1); //截取的是[0,i]位置的字符串。
String s2=num.substring(i+1,j+1); //截取的[i+1,j]位置的字符串。
String s3=num.substring(j+1); //剩余的字符串
if(isValid(s1,s2,s3))
return true;
}
}
return false;
}
public boolean isValid(String s1,String s2,String str)
{
if(str.equals(""))
return true;
long tmp=Long.valueOf(s1)+Long.valueOf(s2);
String tmp1=String.valueOf(tmp);
int len =tmp1.length();
if(str.startsWith(tmp1)&&isValid(s2,tmp1,str.substring(len)))
return true;
return false;
}
}