123
返回列表 发新帖
楼主: jackjiang2
跳转到指定楼层
上一主题 下一主题
收起左侧

悬赏 epic的OA一道题 additive number

🔗
halfbloon 2015-3-10 02:20:55 | 只看该作者
全局:
感谢指点!
回复

使用道具 举报

🔗
wyc25013 2015-7-3 10:28:18 | 只看该作者
全局:
有大神说下思路吗。。。
回复

使用道具 举报

🔗
wyc25013 2015-7-3 11:19:02 | 只看该作者
全局:
  1. #include <vector>
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;

  5. class Solution{
  6. public:
  7.         vector<int> additiveNum(int start, int end){
  8.                 vector<int> ret;                                                       
  9.                 for(int i = start; i <= end; i++)
  10.                         if(isAdditive(i))
  11.                                 ret.push_back(i);
  12.                 return ret;
  13.         }

  14.         bool isAdditive(int num){
  15.                 string s = to_string(num);
  16.                 if(s.length() < 3) return false;
  17.                 for(int i = 2; i/2 <= s.length()-i; i++){        // i== length of sum of two first string
  18.                         for(int j = 1; j <= i-1; j++){                        // j== length of first string
  19.                                 string s1 = s.substr(0,j);                        // s1: 0,j-1; s2: j,i-1
  20.                                 string s2 = s.substr(j,i-j);
  21.                                 if(s1[0]=='0' || s2[0]=='0') break;        // 0XX is not allowed
  22.                                 int i1 = stoi(s1);
  23.                                 int i2 = stoi(s2);
  24.                                 int i3 = i1+i2;
  25.                                 string s3 = to_string(i3);
  26.                                 if(s.find(s3) != i) break;
  27.                                 if(helper(s2,s3,s.substr(j))) return true;
  28.                         }
  29.                 }
  30.                 return false;
  31.         }

  32.         bool helper(string s1, string s2, string s){
  33.                 if(s.compare(s1+s2)==0) return true;
  34.                 int i1 = stoi(s1); int i2 = stoi(s2);
  35.                 int i3 = i1+i2;
  36.                 string s3 = to_string(i3);
  37.                 int pos = s1.length()+s2.length();
  38.                 if(s.find(s3) != pos) return false;
  39.                 else return helper(s2,s3,s.substr(s1.length()));
  40.         }
  41. };

  42. int main(){
  43.         Solution soln;
  44.         vector<int> a = soln.additiveNum(10000,1000000);
  45.         for(int i = 0; i < a.size(); i++)
  46.                 cout<<a[i]<<endl;
  47. }
复制代码
小弟不才 也贡献一个解答。
可能有corner case没有关注 欢迎指正,
效率似乎也不行,纯纯的brute force。。
不知此题有没有什么更快的方案。
回复

使用道具 举报

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

本版积分规则

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