addtive numer
主要是判断一个数是不是可加的,譬如1123,13417等都是addtive numer
首先,本算法可以采用递归方法或者迭代方法,判断函数为isTrue函数。
首先选择数a,可以从第0位一直到一半的位数就足够 a i位
在选择数b,b j位
l为字符串总长度
选完数a,b后,留下的位数l-j要大于i和j-i之中的最大值,道理简单易懂
最后,将a,b,和剩余的字符串substr截取出来作为参数传递给isTrue函数
isTrue函数将a,b之和相加,判断substr是否是以a,b之和c的字符串为开头,如果是,将剩余的字符串和b,c传入isTrue函数进行递归,若最终substr为空字符串,
返回true。
如果不包含,则返回false
代码如下
class Solution {
public boolean isAdditiveNumber(String num) {
int l = num.length();
for(int i = 1;i<=(l-1)/2;i++){
if(num.charAt(0)=='0'&& i>=2) break;
for (int j = i+1; l-j>=Math.max(j-i, i); j++) {
if(num.charAt(i)=='0'&& j-i>=2) break;
long num1 = Long.parseLong(num.substring(0, i));
long num2 = Long.parseLong(num.substring(i, j));
String substr = num.substring(j);
if(isTrue(substr,num1,num2))
return true;
}
}
return false;
}
private boolean isTrue(String substr, long num1, long num2) {
if(substr.equals("")) return true;
Long nums3 = num1+num2;
if(!substr.startsWith(nums3.toString())){
return false;
}
return isTrue(substr.substring(nums3.toString().length()),num2,nums3);
}
}