/* * 306. Additive Number * 2016-7-3 by Mingyang * 这个题目我经过了很多次尝试都败下阵来,不外乎一个情况 * 当这个string包含的数是overflow的时候我没能很好地handle * 下面看看吧例子是如何handle的 */ public boolean isAdditiveNumber(String s) { int n = s.length(); for (int i = 1; i < n; i++) { for (int j = i + 1; j < n; j++) { long a = parse(s.substring(0, i)); long b = parse(s.substring(i, j)); if (a == -1 || b == -1) continue; //找到两个数,然后分别dfs,注意,这里的parse是自定义函数! if (dfs(s.substring(j), a, b)) return true; } } return false; } boolean dfs(String s, long a, long b) { if (s.length() == 0) return true; for (int i = 1; i <= s.length(); i++) { long c = parse(s.substring(0, i)); if (c == -1) continue; if (c - a == b && dfs(s.substring(i), b, c)) { return true; } } return false; } //来看看parse,如果有差错就返回-1.若是0开头也返回-1 long parse(String s) { if (!s.equals("0") && s.startsWith("0")) return -1; long result = 0; try { result = Long.parseLong(s); } catch (NumberFormatException e) { return -1; } return result; }