传说中的谷歌招聘委员会成员之一,从幕后走出来,教你学系统设计!


一亩三分地论坛

 找回密码
 获取更多干活,快来注册
天天打游戏、照样领工资、还办H1B
这份工作你要不要?
把贵司招聘信息放这里
查看: 2856|回复: 4
收起左侧

24点

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

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

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

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

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 {.鏈枃鍘熷垱鑷1point3acres璁哄潧

  2.         public static void main(String[] args) {
  3.                 TwentyFour tf = new TwentyFour();.鐣欏璁哄潧-涓浜-涓夊垎鍦
  4.                 int[] arr = { 1, 50, 3, 6, 7 };
  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.                 }
  11.                 Arrays.sort(arr);
  12.                 boolean[] visited = new boolean[arr.length];.1point3acres缃
  13.                 List<List<Integer>> lists = new ArrayList<List<Integer>>();
  14.                 getPermutation(lists, new ArrayList<Integer>(), arr, visited);. 1point3acres.com/bbs

  15.                 for (List<Integer> candidate : lists) { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  16.                         List<Integer> list = helper(candidate, target, 0, arr.length - 1);
  17.                         for (int i : list) {
  18.                                 if (i == target) {
  19.                                         return true;
  20.                                 }. 鍥磋鎴戜滑@1point 3 acres
  21.                         }
  22.                 }
  23.                 return false;.1point3acres缃
  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]) {
  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.         }

  42.         private List<Integer> helper(List<Integer> arr, int target, int start,
  43.                         int end) {
  44.                 List<Integer> res = new ArrayList<Integer>();
  45.                 if (start > end) {
  46.                         return res;
  47.                 }
  48.                 if (start == end) {
  49.                         res.add(arr.get(start));.1point3acres缃
  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);
  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.                         }. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  65.                 }.鐣欏璁哄潧-涓浜-涓夊垎鍦
  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-9-27 06:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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