回复: 22
跳转到指定楼层
上一主题 下一主题
收起左侧

悬赏 epic的OA一道题 additive number

全局:
400小米
题目如下:
4.Additive numbers are defined to be a positive integer whose digits form an
additive sequence. E.g. 11235 (1+1=2, 1+2=3, 2+3=5). What makes it
difficult is that 12,122,436 i
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
="#000000">

求!!!!


补充内容 (2014-10-2 16:49):
噗 为毛在版上面没找到我的悬赏 难道是木有了么

最佳答案

查看完整内容

测试: 补充内容 (2014-10-3 08:24): 忘了带上类声明了,自己套上吧。 补充内容 (2014-10-3 08:27): 忘了是个range了,在外面套个函数调用这个public的函数即可。

上一篇:TripAdvisor电面
下一篇:HBK online assessment面经
🔗
chitose 2014-10-3 05:43:02 | 只看该作者
全局:
  1.     public static boolean isAdditiveNumber(final int number){
  2.         if(number < 100){
  3.             return false;
  4.         }else{
  5.             return isAdditiveNumberHelper(number);
  6.         }
  7.     }
  8.     private static boolean isAdditiveNumberHelper(final int number){
  9.         final int length = (int)(Math.log10(number) + 1);
  10.         for(int splitLength = 1; splitLength <= (length / 2); splitLength++){
  11.             if(isAdditive(intToIntegerArray(number, splitLength))){
  12.                 return true;
  13.             }
  14.         }
  15.         return false;
  16.     }
  17.     private static boolean isAdditive(ArrayList<Integer> numberList){
  18.         if(numberList == null || numberList.size() < 3){
  19.             return false;
  20.         }
  21.         for(int index = 0; index < numberList.size() - 2; index++){
  22.             final int a = numberList.get(index);
  23.             final int b = numberList.get(index + 1);
  24.             final int c = numberList.get(index + 2);

  25.             if(a + b != c){
  26.                 return false;
  27.             }
  28.         }
  29.         return true;
  30.     }
  31.     private static ArrayList<Integer> intToIntegerArray(final int numberToConvert, final int digitNumInEachElement){
  32.         if(numberToConvert < 100){
  33.             return null;
  34.         }
  35.         if(digitNumInEachElement <= 0){
  36.             return null;
  37.         }else{
  38.             final int length = (int)(Math.log10(numberToConvert) + 1);
  39.             ArrayList<Integer> resultList = null;
  40.             if(length % digitNumInEachElement == 1){
  41.                 final int lastDigit = numberToConvert % 10;
  42.                 resultList = splitHelper(numberToConvert / 10, digitNumInEachElement);
  43.                 final int lastIndex = resultList.size() - 1;
  44.                 resultList.set(lastIndex, resultList.get(lastIndex) * 10 + lastDigit);
  45.             }else if(length % digitNumInEachElement == 0){
  46.                 resultList = splitHelper(numberToConvert, digitNumInEachElement);
  47.             }
  48.             return matchLength(digitNumInEachElement, resultList) ? resultList : null;
  49.         }
  50.     }
  51.     private static ArrayList<Integer> splitHelper(final int numberToConvert, final int digitNumInEachElement){
  52.         final int divider = (int)Math.pow(10, digitNumInEachElement);
  53.         int numToProcess = numberToConvert;
  54.         ArrayList<Integer> resultList = new ArrayList<Integer>();
  55.         while(numToProcess != 0){
  56.             resultList.add(0, numToProcess % divider);
  57.             numToProcess /= divider;
  58.         }
  59.         return resultList;
  60.     }
  61.     private static boolean matchLength(final int requiredLen, ArrayList<Integer> listToCheck){
  62.         for(int element : listToCheck){
  63.             if(element == 0){
  64.                 continue;
  65.             }else{
  66.                 if(element < (int) Math.pow(10, requiredLen - 1)){
  67.                     return false;
  68.                 }
  69.             }
  70.         }
  71.         return true;
  72.     }
复制代码
测试:
  1.         // True
  2.         System.out.println(GoogleOctFirst.isAdditiveNumber(112));
  3.         System.out.println(GoogleOctFirst.isAdditiveNumber(11235));
  4.         System.out.println(GoogleOctFirst.isAdditiveNumber(12122436));
  5.         // False
  6.         System.out.println(GoogleOctFirst.isAdditiveNumber(111));
  7.         System.out.println(GoogleOctFirst.isAdditiveNumber(113));
  8.         System.out.println(GoogleOctFirst.isAdditiveNumber(12345));
  9.         System.out.println(GoogleOctFirst.isAdditiveNumber(11237));
复制代码

补充内容 (2014-10-3 08:24):
忘了带上类声明了,自己套上吧。

补充内容 (2014-10-3 08:27):
忘了是个range了,在外面套个函数调用这个public的函数即可。

评分

参与人数 1大米 +5 收起 理由
jackjiang2 + 5 感谢 答题

查看全部评分

回复

使用道具 举报

🔗
 楼主| jackjiang2 2014-10-3 07:15:07 | 只看该作者
全局:
如有满意滴答案 必然疯狂评分。求 各位缺大米的大神解决
回复

使用道具 举报

🔗
jeff0902 2014-10-3 09:04:23 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

评分

参与人数 1大米 +5 收起 理由
jackjiang2 + 5 补分

查看全部评分

回复

使用道具 举报

🔗
 楼主| jackjiang2 2014-10-3 09:39:59 | 只看该作者
全局:
hakase 发表于 2014-10-2 19:18
测试:

补充内容 (2014-10-3 08:24):

摸摸哒  小弟给大神跪一个先 明天我测试一下 能用 就采纳 摸摸哒 今天评分用完了 必然再补上20大米
回复

使用道具 举报

🔗
 楼主| jackjiang2 2014-10-3 09:41:19 | 只看该作者
全局:
jeff0902 发表于 2014-10-2 20:04
public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i

少年 好遗憾 上面的兄弟 早你一步 等我每天的评分恢复回来 必然送上20 大米 如果你能等的话
回复

使用道具 举报

🔗
 楼主| jackjiang2 2014-10-3 09:47:24 | 只看该作者
全局:
下面的同志不好意思了 小弟 等级太低 每天评分太少 只能给上面两位评分
悬赏的话 我估计第一个回复的大神八成以上是对的 很大概率悬赏给他了
如果上面两位答案有很大的出入的话 悬赏才能出现在楼下抱歉

进版都是缘分


回复

使用道具 举报

🔗
 楼主| jackjiang2 2014-10-3 09:49:20 | 只看该作者
全局:
jeff0902 发表于 2014-10-2 20:04
public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i

少年 你最好发一个主题 要不然我评分也找不到地方 0.0 再次感谢回答我的问题
回复

使用道具 举报

🔗
chitose 2014-10-3 09:58:34 | 只看该作者
全局:
jackjiang2 发表于 2014-10-3 09:39
摸摸哒  小弟给大神跪一个先 明天我测试一下 能用 就采纳 摸摸哒 今天评分用完了 必然再补上20大米

售后服务,打个补丁。超过八位数的时候可能有nullException。
  1.     private static ArrayList<Integer> intToIntegerArray(final int numberToConvert, final int digitNumInEachElement){
  2.         if(numberToConvert < 100){
  3.             return null;
  4.         }
  5.         if(digitNumInEachElement <= 0){
  6.             return null;
  7.         }else{
  8.             final int length = (int)(Math.log10(numberToConvert) + 1);
  9.             ArrayList<Integer> resultList = null;
  10.             if(length % digitNumInEachElement == 1){
  11.                 final int lastDigit = numberToConvert % 10;
  12.                 resultList = splitHelper(numberToConvert / 10, digitNumInEachElement);
  13.                 final int lastIndex = resultList.size() - 1;
  14.                 resultList.set(lastIndex, resultList.get(lastIndex) * 10 + lastDigit);
  15.             }else if(length % digitNumInEachElement == 0){
  16.                 resultList = splitHelper(numberToConvert, digitNumInEachElement);
  17.             }
  18.             // When number is very long, resultList may be null; Since (xxx + xxx) will never equals to xxxxx;
  19.             if(resultList == null){
  20.                 return null;
  21.             }
  22.             return matchLength(digitNumInEachElement, resultList) ? resultList : null;
  23.         }
  24.     }
复制代码

评分

参与人数 1大米 +5 收起 理由
jackjiang2 + 5 摸摸 补分一记

查看全部评分

回复

使用道具 举报

🔗
 楼主| jackjiang2 2014-10-3 10:18:23 | 只看该作者
全局:
hakase 发表于 2014-10-2 20:58
售后服务,打个补丁。超过八位数的时候可能有nullException。

么么哒。这epic的oa一点也不水呀 好难的说
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表