For example:
"112358" is an additive number because the digits can form an additive sequence: 1, 1, 2, 3, 5, 8.
1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8
"199100199" is also an additive number, the additive sequence is: 1, 99, 100, 199.
1 + 99 = 100, 99 + 100 = 199
Note: Numbers in the additive sequence cannot have leading zeros, so sequence 1, 2, 03 or 1, 02, 3 is invalid.
public class Solution {
public boolean isAdditiveNumber(String num) {
if(num == null || num.length() == 0) return false;
int n = num.length();
for(int i = 1; i <= n/2; i++){ // len of x1
for(int j = 1; Math.max(i, j) + i + j <= n; j++) { // len of x2
if(isValid(i, j, num)) return true;
}
}
return false;
}
public boolean isValid(int i, int j, String num){
if(i > 1 && num.charAt(0) == '0') return false;
if(j > 1 && num.charAt(i) == '0') return false;
String sum;
Long x1 = Long.parseLong(num.substring(0, i));
Long x2 = Long.parseLong(num.substring(i, i+j));
for(int start = i + j; start < num.length(); start += sum.length()){
x2 = x1 + x2; // sum of x1 and x2, and became new x2
x1 = x2 - x1; // last x2 is new x1
sum = x2.toString();
if(!num.startsWith(sum, start)) return false;
}
return true;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。