用dfs
class Solution {
public boolean isAdditiveNumber(String num) {
if (num.length() < 3)
return false;
return dfs(num,0,0,0,0);
}
/**
*
* @param num 字符串
* @param index 起点
* @param count 目前已经判断的数字个数
* @param first 第一个数
* @param second 第二个数
* @return
*/
private boolean dfs(String num, int index, int count, long first, long second) {
if (index == num.length())
return count > 2;
//如果没有达到最后
long cur = 0;
for(int i = index; i < num.length(); i++){
if (num.charAt(index) == '0' && i > index)
return false;
//获取当前数字,有可能出现当前数字是多位的情况,所以用sum存储
cur = cur * 10 + num.charAt(i) - '0';
//如果已经有两个数字,才会根据第三个数字进行计算
if (count >= 2){
long sum = first + second;
//如果前两个数字相加已经小于了第三个数字,那么直接返回false
if (sum < cur)
return false;
//如果和大于第三个数字,说明当前的第三个数字可能要作为前面两个数字的一位,所以跳过往下的dfs,将第三位加入到当前数
if (sum > cur)
continue;
}
//运行到这里说明要往下进行dfs
if (dfs(num,i + 1,count + 1,second,cur))
return true;
}
return false;
}
}