活跃农民
- 积分
- 304
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-4-24
- 最后登录
- 1970-1-1
|
- public static boolean isAdditiveNumber(final int number){
- if(number < 100){
- return false;
- }else{
- return isAdditiveNumberHelper(number);
- }
- }
- private static boolean isAdditiveNumberHelper(final int number){
- final int length = (int)(Math.log10(number) + 1);
- for(int splitLength = 1; splitLength <= (length / 2); splitLength++){
- if(isAdditive(intToIntegerArray(number, splitLength))){
- return true;
- }
- }
- return false;
- }
- private static boolean isAdditive(ArrayList<Integer> numberList){
- if(numberList == null || numberList.size() < 3){
- return false;
- }
- for(int index = 0; index < numberList.size() - 2; index++){
- final int a = numberList.get(index);
- final int b = numberList.get(index + 1);
- final int c = numberList.get(index + 2);
- if(a + b != c){
- return false;
- }
- }
- return true;
- }
- private static ArrayList<Integer> intToIntegerArray(final int numberToConvert, final int digitNumInEachElement){
- if(numberToConvert < 100){
- return null;
- }
- if(digitNumInEachElement <= 0){
- return null;
- }else{
- final int length = (int)(Math.log10(numberToConvert) + 1);
- ArrayList<Integer> resultList = null;
- if(length % digitNumInEachElement == 1){
- final int lastDigit = numberToConvert % 10;
- resultList = splitHelper(numberToConvert / 10, digitNumInEachElement);
- final int lastIndex = resultList.size() - 1;
- resultList.set(lastIndex, resultList.get(lastIndex) * 10 + lastDigit);
- }else if(length % digitNumInEachElement == 0){
- resultList = splitHelper(numberToConvert, digitNumInEachElement);
- }
- return matchLength(digitNumInEachElement, resultList) ? resultList : null;
- }
- }
- private static ArrayList<Integer> splitHelper(final int numberToConvert, final int digitNumInEachElement){
- final int divider = (int)Math.pow(10, digitNumInEachElement);
- int numToProcess = numberToConvert;
- ArrayList<Integer> resultList = new ArrayList<Integer>();
- while(numToProcess != 0){
- resultList.add(0, numToProcess % divider);
- numToProcess /= divider;
- }
- return resultList;
- }
- private static boolean matchLength(final int requiredLen, ArrayList<Integer> listToCheck){
- for(int element : listToCheck){
- if(element == 0){
- continue;
- }else{
- if(element < (int) Math.pow(10, requiredLen - 1)){
- return false;
- }
- }
- }
- return true;
- }
复制代码 测试:- // True
- System.out.println(GoogleOctFirst.isAdditiveNumber(112));
- System.out.println(GoogleOctFirst.isAdditiveNumber(11235));
- System.out.println(GoogleOctFirst.isAdditiveNumber(12122436));
- // False
- System.out.println(GoogleOctFirst.isAdditiveNumber(111));
- System.out.println(GoogleOctFirst.isAdditiveNumber(113));
- System.out.println(GoogleOctFirst.isAdditiveNumber(12345));
- System.out.println(GoogleOctFirst.isAdditiveNumber(11237));
复制代码
补充内容 (2014-10-3 08:24):
忘了带上类声明了,自己套上吧。
补充内容 (2014-10-3 08:27):
忘了是个range了,在外面套个函数调用这个public的函数即可。 |
|