《数据科学面试40+真题讲解》,K神本年度最后一次开课


一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推你去多家公司面试
Airbnb 数据科学职位
in analytics and inference
天天打游戏、照样领工资,
你要不要来?
把贵司招聘信息放这里
查看: 2883|回复: 12
收起左侧

FB第一轮面试

[复制链接] |试试Instant~ |关注本帖
tigerbro 发表于 2016-2-21 00:00:08 | 显示全部楼层 |阅读模式

2016(1-3月) 码农类 硕士 全职@Facebook - 猎头 - 技术电面 |Pass在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
给一个正数n,打印出所有相加的组合
例如10可以打印出
1+1+1+...1
1+2+1+...1. more info on 1point3acres.com
..
9+1
10

在本论坛得到帮助不少,希望onsite能顺利

评分

1

查看全部评分

本帖被以下淘专辑推荐:

duduhaha 发表于 2016-2-21 03:50:43 | 显示全部楼层
输入是10的话,楼主这题 "9 + 1" 和 " 1 + 9"应该只能输出一个吧?
回复 支持 反对

使用道具 举报

 楼主| tigerbro 发表于 2016-2-21 04:22:49 | 显示全部楼层
duduhaha 发表于 2016-2-21 03:50
输入是10的话,楼主这题 "9 + 1" 和 " 1 + 9"应该只能输出一个吧?

对,不能重复
回复 支持 反对

使用道具 举报

beer 发表于 2016-2-28 00:37:30 | 显示全部楼层
这个是Combination Sum 的变种嘛?初始化set {1,2,...,n}, 用DFS一层一层搜。
回复 支持 反对

使用道具 举报

 楼主| tigerbro 发表于 2016-2-28 03:19:39 | 显示全部楼层
beer 发表于 2016-2-28 00:37
这个是Combination Sum 的变种嘛?初始化set {1,2,...,n}, 用DFS一层一层搜。

没错,很像,简单些
回复 支持 反对

使用道具 举报

xiaohui5319 发表于 2016-3-24 10:01:33 | 显示全部楼层
void printAllCombinations(int target, string path, vector<string>& paths, vector<int>& candidates, int startPos) {
  if (target == 0) {
    cout << path.substr(1) << endl;
    paths.push_back(path);
  }
  for (int i = startPos; i < candidates.size(); i++) {
    if (candidates[i] > target) break; //reach a candidate that is bigger than target
    printAllCombinations(target - candidates[i], path + "+" + to_string(candidates[i]), paths, candidates, i);
  }. 1point3acres.com/bbs
}

int main() {
  int n = 10;
  vector<string> paths;. 1point3acres.com/bbs
  vector<int> candidates;
  for (int i = 1; i <= n; i++) candidates.push_back(i);. more info on 1point3acres.com
  int startPos = 0;
  printAllCombinations(n, "", paths, candidates, startPos);
}
回复 支持 反对

使用道具 举报

mingzhou1987 发表于 2016-3-24 14:51:23 | 显示全部楼层
没有重复的版本。
void dfs(int step, string curStr, int curSum, int target). 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
{
        if (curSum > target)return;
        if (curSum == target)
        {
                curStr.pop_back(); //pop out last '+'.鐣欏璁哄潧-涓浜-涓夊垎鍦
                cout << curStr << endl;. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
        }
        for (int i = step; i <= target; i++)
        {. 1point3acres.com/bbs
                if (i == target && curSum == 0)
                {
                        cout << i << endl;
                }
                else
                {
                        dfs(i, curStr + to_string(i) + '+', curSum + i, target);
                }
        }
}
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-12 15:29:55 | 显示全部楼层
  1. public class Solution {
  2.   public List<List<Integer>> expression(int n, int startpos) {
  3.     List<List<Integer>> ret = new ArrayList<>();
  4.     if (n == 0) {
  5.       List<Integer> list = new ArrayList<>();
  6.       ret.add(list);
  7.       return ret;
  8.     }
  9.     for (int i = startpos; i <= n; i++) {. visit 1point3acres.com for more.
  10.       List<List<Integer>> r = expression(n - i, i);
  11.       if (!r.isEmpty()) {. from: 1point3acres.com/bbs
  12.         for (List<Integer> l : r) {
  13.           l.add(0, i);
  14.           ret.add(l);. Waral 鍗氬鏈夋洿澶氭枃绔,
  15.         }
  16.       }
  17.     }
  18.     return ret;
  19.   }
  20. . 1point3acres.com/bbs
  21.   public static void main(String[] args) {
  22.     Solution s = new Solution();
  23.     for (List<Integer> l : s.expression(10, 1))
  24.       System.out.println(l);
  25.   }
  26. }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
复制代码
回复 支持 反对

使用道具 举报

sheepmiemies 发表于 2016-6-22 08:57:20 | 显示全部楼层
mark一下。。。现在回头看思路要清晰一些
1. 可以直接构造一个数组[1, n],强行转化成 LC 的 Combination Sum I。多了O(n)的空间。
2. dfs的时候,给定一个上界pos,从上界pos循环到1。这个的输出结果会和LZ的例子比较像。 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

补充内容 (2016-6-22 08:57):
忘了标注了,是两种方法。。。
回复 支持 反对

使用道具 举报

hunter12345654 发表于 2016-7-22 09:04:27 | 显示全部楼层
这个算dp不. 鍥磋鎴戜滑@1point 3 acres
感觉总的思想就是 f(n)=f(0)+f(1)+f(2)+...+f(n-1);
. 鍥磋鎴戜滑@1point 3 acres

回复 支持 反对

使用道具 举报

997562971@qq.co 发表于 2016-7-31 06:27:20 | 显示全部楼层
  1. public class FBsum {
  2.     public List<List<Integer>> fbSum(int num){
  3.         ArrayList<List<Integer>> rst= new ArrayList<>();
  4.         ArrayList<Integer> path = new ArrayList<>();
  5.         helper(rst,path,num);
  6.         return rst;
  7.     }
  8.     private void helper(ArrayList<List<Integer>> rst, ArrayList<Integer> path, int num) {
  9.         if(num == 0){
  10.             rst.add(new ArrayList(path));
  11.             return;
  12.         }
    .鐣欏璁哄潧-涓浜-涓夊垎鍦
  13.         int start = 0;
  14.         if(path.size()==0){
  15.             start = 1;
  16.         }else{
  17.             start = path.get(path.size()-1);. Waral 鍗氬鏈夋洿澶氭枃绔,
  18.         }
  19.         for(int i=start;i<=num;i++){ 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  20.             path.add(i);. visit 1point3acres.com for more.
  21.             helper(rst,path,num - i);
  22.             path.remove(path.size()-1);
  23.         }
  24.     }
  25.     public static void main(String[] args) {
  26.         FBsum sol = new FBsum();.鐣欏璁哄潧-涓浜-涓夊垎鍦
  27.         List<List<Integer>> rst = sol.fbSum(4);
  28.         System.out.println(rst.toString());   
  29.     }. 鍥磋鎴戜滑@1point 3 acres
  30. }
复制代码
. Waral 鍗氬鏈夋洿澶氭枃绔,
补充内容 (2016-7-31 06:31):
写了个比较容易看懂的dfs。简单试了下,应该没问题。. visit 1point3acres.com for more.

补充内容 (2016-7-31 06:31):
写了个比较容易看懂的dfs..
回复 支持 反对

使用道具 举报

wzs9988 发表于 2016-7-31 07:01:39 | 显示全部楼层
  1. public static void main(String[] args) {. visit 1point3acres.com for more.
  2.     System.out.println(combination(10));
  3. }. from: 1point3acres.com/bbs
  4. public static List<List<Integer>> combination(int n) {
  5.     List<List<Integer>> res = new ArrayList<>();
  6.     combination(res, new ArrayList<>(), n, 1);. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  7.     return res;
  8. }
  9. private static void combination(List<List<Integer>> res, List<Integer> cur, int n, int start) {
  10.     if (n == 0) {
  11.         res.add(new ArrayList<>(cur));. 鍥磋鎴戜滑@1point 3 acres
  12.     } else {
  13.         for (int i = start; i <= n; ++i) {
  14.             cur.add(i);
  15.             combination(res, cur, n - i, i);
  16.             cur.remove(cur.size() - 1);
  17.         }
  18.     }. 1point3acres.com/bbs
  19. }
复制代码

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

xnature 发表于 2016-8-16 07:45:51 | 显示全部楼层
short python code

  1. def f(n):
  2.     ans = []
  3.     ret = [[]]
  4.     while True:. from: 1point3acres.com/bbs
  5.         less = filter(lambda x:sum(x) < n, ret)
  6.         eq = filter(lambda x:sum(x) == n, ret)
  7.         ans.extend(eq)
  8.         if less:
  9.             ret = [r + [i] for r in less for i in range(r[-1] if r else n, 0, -1)]. Waral 鍗氬鏈夋洿澶氭枃绔,
  10.         else:
  11.             return ans
复制代码


还可以优化但是写起来就难看了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-11-19 07:25

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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