注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
一个数字如果能拆成若干组3个数使得前两个数的和为第三个数,些数字称为additive number.
Ex: 123 true, 1234 false, 123246 true, 122436 true.
应该要考虑所有拆分情况,我是直接暴力解了…………求更好的方法
欢迎拍砖……
public static boolean isAdditive(int n){
if (n<100)
return false;
return isAdditive(String.valueOf(n).toCharArray(),0);
}
public static boolean isAdditive(char[] digits, int start){
int len = digits.length;
if (start == len)
return true;
if (len - start < 3)
return false;
for (int i = start; i <= start + (len-start)/2; i++){
int part1 = charToInt(digits,start,i);
int len1 = i - start + 1;
for (int j = i+1; j <= i+(len-start)/2; j++){
int len2 = j - i;
int left = len - len1 - len2;
if (left < Math.min(len1,len2))
break;
int part2 = charToInt(digits,i+1,j);
int sum = part1 + part2;
int sumLen = String.valueOf(sum).length();
if (left >= sumLen){
int part3 = charToInt(digits,j+1,j+sumLen);
if (part3 == sum)
return isAdditive(digits,j+sumLen+1);
}
}
}
return false;
}
public static int charToInt(char[] digits, int start, int end){
int res = 0;
for (int i = start; i <= end; i++){
res = res * 10 + (digits[i] - '0');
}
return res;
}
|