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


一亩三分地论坛

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

24点

[复制链接] |试试Instant~ |关注本帖
bobzhang2004 发表于 2016-4-2 22:54:51 | 显示全部楼层 |阅读模式

2016(1-3月) 码农类 硕士 全职@Google - 内推 - HR筛选 |Other其他

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

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

x
一道面经中经常出现的题
coding一道 类似24点。 题目是给一组integer 问可否用加减乘除使结果等于某个target。比如{1,50,3,6,7},target=60 结果是true 50+6/3+1+7=60
这个是要用recursion来枚举吗?
adiggo 发表于 2016-4-3 02:27:50 | 显示全部楼层
所有数字必须用到么
回复 支持 0 反对 1

使用道具 举报

 楼主| bobzhang2004 发表于 2016-4-3 01:54:05 | 显示全部楼层
  1. public class TwentyFour {

  2.         public static void main(String[] args) {. 1point3acres.com/bbs
  3.                 TwentyFour tf = new TwentyFour();
  4.                 int[] arr = { 1, 50, 3, 6, 7 };. From 1point 3acres bbs
  5.                 System.out.println(tf.canGetTwentyFour(arr, 60));
  6.         }

  7.         public boolean canGetTwentyFour(int[] arr, int target) {
  8.                 if (arr == null || arr.length == 0) {
  9.                         return false;.鐣欏璁哄潧-涓浜-涓夊垎鍦
  10.                 }. more info on 1point3acres.com
  11.                 Arrays.sort(arr);
  12.                 boolean[] visited = new boolean[arr.length];.鐣欏璁哄潧-涓浜-涓夊垎鍦
  13.                 List<List<Integer>> lists = new ArrayList<List<Integer>>();
  14.                 getPermutation(lists, new ArrayList<Integer>(), arr, visited);

  15.                 for (List<Integer> candidate : lists) {
  16.                         List<Integer> list = helper(candidate, target, 0, arr.length - 1);.鏈枃鍘熷垱鑷1point3acres璁哄潧
  17.                         for (int i : list) {. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  18.                                 if (i == target) {
  19.                                         return true;
  20.                                 }. visit 1point3acres.com for more.
  21.                         }
  22.                 }
  23.                 return false;
  24.         }

  25.         private void getPermutation(List<List<Integer>> lists,
  26.                         ArrayList<Integer> list, int[] arr, boolean[] visited) {
  27.                 if (list.size() == arr.length) {
  28.                         lists.add(new ArrayList<Integer>(list));
  29.                         return;
  30.                 }
  31.                 for (int i = 0; i < arr.length; i++) {
  32.                         if (visited[i] || i > 0 && arr[i] == arr[i - 1] && !visited[i - 1]) {. 1point 3acres 璁哄潧
  33.                                 continue;
  34.                         }
  35.                         visited[i] = true;
  36.                         list.add(arr[i]);
  37.                         getPermutation(lists, list, arr, visited);
  38.                         list.remove(list.size() - 1);
  39.                         visited[i] = false;
  40.                 }
  41.         }.鏈枃鍘熷垱鑷1point3acres璁哄潧

  42.         private List<Integer> helper(List<Integer> arr, int target, int start,. 1point3acres.com/bbs
  43.                         int end) {
  44.                 List<Integer> res = new ArrayList<Integer>();
  45.                 if (start > end) {
  46.                         return res;-google 1point3acres
  47.                 }
  48.                 if (start == end) {
  49.                         res.add(arr.get(start));
  50.                         return res;
  51.                 }

  52.                 for (int i = start; i < end; i++) {
  53.                         List<Integer> left = helper(arr, target, start, i);
  54.                         List<Integer> right = helper(arr, target, i + 1, end);.鏈枃鍘熷垱鑷1point3acres璁哄潧
  55.                         for (int l : left) {
  56.                                 for (int r : right) {
  57.                                         res.add((l + r));
  58.                                         res.add((l * r));
  59.                                         if (r != 0) {
  60.                                                 res.add((l / r));
  61.                                         }
  62.                                         res.add((l - r));
  63.                                 }
  64.                         }. 鍥磋鎴戜滑@1point 3 acres
  65.                 }-google 1point3acres
  66.                 return res;
  67.         }
    . 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  68. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| bobzhang2004 发表于 2016-4-3 02:31:06 | 显示全部楼层
adiggo 发表于 2016-4-3 02:27
所有数字必须用到么

应该是的,并且顺序不一定
回复 支持 反对

使用道具 举报

jy_121 发表于 2016-4-27 05:21:39 | 显示全部楼层
除了枚举出所有情况还有其他做法吗?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-11-20 00:39

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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