306. 累加数
累加数 是一个字符串,组成它的数字可以形成累加序列。
一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。
给你一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。
说明:累加序列里的数 不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/additive-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.math.BigInteger;
import java.util.Scanner;
class Solution {
public boolean isAdditiveNumber(String num) {
if (num == null || num.length() == 0) {
return false;
}
BigInteger first = BigInteger.ZERO;
for (int i = 0; i < num.length(); ++i) {
if (i == 1 && num.charAt(0) == '0') {
break;
}
first = first.multiply(BigInteger.TEN).add(BigInteger.valueOf(num.charAt(i) - '0'));
BigInteger second = BigInteger.ZERO;
for (int j = i + 1; j < num.length(); ++j) {
if (j == i + 2 && num.charAt(i + 1) == '0') {
break;
}
second = second.multiply(BigInteger.TEN).add(BigInteger.valueOf(num.charAt(j) - '0'));
BigInteger a = first;
BigInteger b = second;
int k = j + 1;
while (k < num.length()) {
BigInteger c = a.add(b);
String str = c.toString();
if (str.length() > num.length() - k) {
break;
}
boolean ok = String.valueOf(num.toCharArray(), k, str.length()).equals(str);
if (ok) {
a = b;
b = c;
k = k + str.length();
if (k == num.length()) {
return true;
}
} else {
break;
}
}
}
}
return false;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
System.out.println(new Solution().isAdditiveNumber(in.next()));
}
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号