LeetCode 306题
纯递归写法
class Solution {
long number1 = 0;
long number2 = 0;
int numIndex = 0;
int beforeZero = 0;
boolean flag = false;
public boolean isAdditiveNumber(String num) {
if(null == num || num.length() < 3) {
return false;
}
int length = num.length();
for(int i = 0; i < length; i++) {
if(flag || beforeZero != 0) {
break;
}
for(int j = i+1; j < length; j++) {
if(flag) {
break;
}
number1 = Long.parseLong(num.substring(0, i+1));
if(0 == number1) {
beforeZero++;
}
number2 = Long.parseLong(num.substring(i+1, j+1));
if(num.substring(i+1, j+1).length() > 1 && num.substring(i+1, j+1).indexOf("0") == 0) {
break;
}
numIndex = j+1;
while(true) {
int nextIndex = dfs(num, number1, number2, numIndex);
if(nextIndex > 0) {
number1 = number2;
number2 = Long.parseLong(num.substring(numIndex, nextIndex));
numIndex = nextIndex;
}else {
break;
}
}
}
}
return flag;
}
private int dfs(String num, long num1, long num2, int index) {
for(int i = index+1; i <= num.length(); i++) {
if(i < num.length() && num.charAt(i) == '0' && i+1 < num.length() && num.charAt(i+1) == '0') {
continue;
}
if(num.substring(index, i).length() > 1 && num.substring(index, i).indexOf("0") == 0) {
break;
}
if(Long.parseLong(num.substring(index, i)) == (num1+num2)) {
if(i == num.length()) {
flag = true;
return 0;
}
return i;
}
if(Long.parseLong(num.substring(index, i)) > (num1+num2)) {
return 0;
}
}
return -1;
}
}
结果