[职场感言] 工作一年了,聊聊三件事

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 10536|回复: 22
收起左侧

[找工就业] 悬赏 epic的OA一道题 additive number

[复制链接] |试试Instant~ |关注本帖
jackjiang2 发表于 2014-10-3 05:43:01 | 显示全部楼层 |阅读模式
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 is also one (12+12=24, 12+24=36). Given a range. from: 1point3acres
of integers, find all the additive numbers in that range.



脑子转不动了,刚看完一个童鞋的OA面经 赶脚还是不对 所以求详细思路 如果有代码最好(java)


OA在即 只好无耻伸手了. Waral 博客有更多文章,


木有多少小米 悬赏400小米

. 1point 3acres 论坛
求!!!!


. 牛人云集,一亩三分地补充内容 (2014-10-2 16:49):
噗 为毛在版上面没找到我的悬赏 难道是木有了么

最佳答案

查看完整内容

测试: 补充内容 (2014-10-3 08:24): 忘了带上类声明了,自己套上吧。 补充内容 (2014-10-3 08:27): 忘了是个range了,在外面套个函数调用这个public的函数即可。
hakase 发表于 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);.本文原创自1point3acres论坛
  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))){. 1point3acres
  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.         }. 围观我们@1point 3 acres
  21.         for(int index = 0; index < numberList.size() - 2; index++){
  22.             final int a = numberList.get(index);. 1point3acres
  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.             }-google 1point3acres
  28.         }. From 1point 3acres bbs
  29.         return true;
  30.     }
  31.     private static ArrayList<Integer> intToIntegerArray(final int numberToConvert, final int digitNumInEachElement){
  32.         if(numberToConvert < 100){. 1point3acres
  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;.1point3acres网
  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{.1point3acres网
  66.                 if(element < (int) Math.pow(10, requiredLen - 1)){
  67.                     return false;
  68.                 }
  69.             }
  70.         }
  71.         return true;. 1point 3acres 论坛
  72.     }
复制代码
测试:
  1.         // True
  2.         System.out.println(GoogleOctFirst.isAdditiveNumber(112));
  3.         System.out.println(GoogleOctFirst.isAdditiveNumber(11235));
  4.         System.out.println(GoogleOctFirst.isAdditiveNumber(12122436));.1point3acres网
  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):
忘了带上类声明了,自己套上吧。
. 1point3acres
补充内容 (2014-10-3 08:27):
忘了是个range了,在外面套个函数调用这个public的函数即可。

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 07:15:07 | 显示全部楼层
如有满意滴答案 必然疯狂评分。求 各位缺大米的大神解决
回复

使用道具 举报

peter1027 发表于 2014-10-3 09:04:23 | 显示全部楼层
        public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i<number.length();i++). 1point 3acres 论坛
                {. From 1point 3acres bbs
                        int part1 = Integer.parseInt(number.substring(0,i));
                        for(int j=i+1;j<number.length();j++)
                        {. 一亩-三分-地,独家发布
                                int part1_tmp = Integer.parseInt(number.substring(0,i));. From 1point 3acres bbs
                                int part2 = Integer.parseInt(number.substring(i,j));
                                int index= j;.1point3acres网
                                int rest  = Integer.parseInt(number.substring(j,number.length()));
                                while(part1_tmp+part2<=rest)
                                {
                                        int part3 = part1_tmp+part2;
                                        String str = (new Integer(part3)).toString();
                                        int length = str.length();
                                        if(index + length > number.length())
                                        {
                                                break;
                                        }
                                        if(number.substring(index,index+length).equals(str)). 留学申请论坛-一亩三分地
                                        {. 一亩-三分-地,独家发布
                                                index=length+index;
                                                if(index==number.length())
                                                {. Waral 博客有更多文章,
                                                        return true;
                                                }. visit 1point3acres for more.
                                                part1_tmp = part2;
                                                part2 = part3;. 1point3acres
                                                rest = Integer.parseInt(number.substring(index,number.length()));
                                        }
                                        else
                                        {. 1point3acres
                                                break;. more info on 1point3acres
                                        }
                                }. visit 1point3acres for more.
                        }
                }
                return false;
        }

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:39:59 | 显示全部楼层
hakase 发表于 2014-10-2 19:18
测试:
-google 1point3acres
补充内容 (2014-10-3 08:24):

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

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:41:19 | 显示全部楼层
peter1027 发表于 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 | 显示全部楼层
peter1027 发表于 2014-10-2 20:04
public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i

少年 你最好发一个主题 要不然我评分也找不到地方 0.0 再次感谢回答我的问题
Mobile Apps Category (English)728x90
回复

使用道具 举报

hakase 发表于 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){. more info on 1point3acres
  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);. visit 1point3acres for more.
  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;.1point3acres网
  19.             if(resultList == null){
  20.                 return null;
  21.             }
  22.             return matchLength(digitNumInEachElement, resultList) ? resultList : null;
  23.         }. 1point3acres
  24.     }
复制代码

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 10:18:23 | 显示全部楼层
hakase 发表于 2014-10-2 20:58
售后服务,打个补丁。超过八位数的时候可能有nullException。

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

使用道具 举报

peter1027 发表于 2014-10-6 23:19:33 | 显示全部楼层
jackjiang2 发表于 2014-10-2 20:41.1point3acres网
少年 好遗憾 上面的兄弟 早你一步 等我每天的评分恢复回来 必然送上20 大米 如果你能等的话
. From 1point 3acres bbs
OK 希望你OA顺利!

评分

1

查看全部评分

回复

使用道具 举报

Allenping 发表于 2014-10-17 09:20:09 | 显示全部楼层
我 想 问一下 哪里 有看 Epic OA 的 帖子 链接, 求 题目, 马上要做了
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-17 10:00:55 | 显示全部楼层
Allenping 发表于 2014-10-16 20:20
我 想 问一下 哪里 有看 Epic OA 的 帖子 链接, 求 题目, 马上要做了

careercup 网站 搜索 epic system就ok
回复

使用道具 举报

charles901030 发表于 2014-10-20 07:07:43 | 显示全部楼层
请问楼主 11112算是additive number吗 因为11+1=12
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-20 07:57:38 | 显示全部楼层
charles901030 发表于 2014-10-19 18:07
请问楼主 11112算是additive number吗 因为11+1=12

算 0.0 你可以用第二个答案 就是 比较简洁的那个 那个我测试了好几个数字都是对的
题目的话会给你一个范围 然后你for这个范围 挨个判断是不是可加数 就行了 。。。。。。
回复

使用道具 举报

cow12331 发表于 2014-10-28 11:20:50 | 显示全部楼层
peter1027 发表于 2014-10-3 09:04
public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i

”12345“ 就死循环了。。 这题要分割是固定长度吗? 12 1 13这种算不算
回复

使用道具 举报

fangxuke19 发表于 2014-11-13 05:49:59 | 显示全部楼层
peter1027 发表于 2014-10-3 09:04
public static boolean isAdditiveNumber(String number)
        {. 留学申请论坛-一亩三分地
                for(int i=1;i
. 留学申请论坛-一亩三分地
我不知道1212246这个算不算?12+12=24;2+4=6如果可以的话你这个程序不对啊
回复

使用道具 举报

fangxuke19 发表于 2014-11-13 06:23:38 | 显示全部楼层
稍微改了一下peter的代码
  1. public static boolean isAdditiveNumber(String nums)
  2.     {   
  3.         int len = nums.length();
  4.         if(len<=1) return true;
  5.         for(int i=1;i<len;i++)
  6.         {
  7.             String p1 = nums.substring(0,i);
  8.             for(int j=i+1;j<len;j++)
  9.             {. 围观我们@1point 3 acres
  10.                 String p2 = nums.substring(i,j);
  11.                 String p3 =String.valueOf(Integer.parseInt(p1)+Integer.parseInt(p2));
  12.                 int index = j+1;
  13.                 int temp_j = j;
  14.                 while(len-temp_j>=p3.length()). 围观我们@1point 3 acres
  15.                 {
  16.                     if(index>len) break;
  17.                     if(p3.equals(nums.substring(temp_j,index)))
  18.                     {. 围观我们@1point 3 acres
  19.                         int temp_i= i;. 一亩-三分-地,独家发布
  20.                         while(temp_i<len&&temp_i<index)
  21.                         {
  22.                             if(isAdditiveNumber(nums.substring(temp_i,len)))
  23.                                 return true;
  24.                             temp_i++;
  25.                         }

  26.                        
  27.                     }
  28.                     index++;
  29.                 }. 牛人云集,一亩三分地
  30.             }
  31.         } 来源一亩.三分地论坛.
  32.         return false;
  33.     }
复制代码
回复

使用道具 举报

头像被屏蔽
jy02677290 发表于 2014-11-15 07:56:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

xzt8350 发表于 2015-1-15 04:43:17 | 显示全部楼层
楼主,这题不应该是return 最后这个 list么,为啥答案都return true和false?
回复

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-24 03:10

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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