一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1462|回复: 4
收起左侧

24点

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

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

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

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

x
一道面经中经常出现的题. 1point3acres.com/bbs
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) {
  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];
  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);
  17.                         for (int i : list) {. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  18.                                 if (i == target) {
  19.                                         return true;
    . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  20.                                 }
  21.                         }. from: 1point3acres.com/bbs
  22.                 }. more info on 1point3acres.com
  23.                 return false;
  24.         }

  25.         private void getPermutation(List<List<Integer>> lists,
  26.                         ArrayList<Integer> list, int[] arr, boolean[] visited) {. from: 1point3acres.com/bbs
  27.                 if (list.size() == arr.length) {
  28.                         lists.add(new ArrayList<Integer>(list));. 1point 3acres 璁哄潧
  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);. visit 1point3acres.com for more.
  38.                         list.remove(list.size() - 1);
  39.                         visited[i] = false;
  40.                 }
  41.         }
  42. . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  43.         private List<Integer> helper(List<Integer> arr, int target, int start,
  44.                         int end) {
  45.                 List<Integer> res = new ArrayList<Integer>();
  46.                 if (start > end) {. From 1point 3acres bbs
  47.                         return res;
  48.                 }
  49.                 if (start == end) {
  50.                         res.add(arr.get(start));
  51.                         return res;
  52.                 }

  53.                 for (int i = start; i < end; i++) {
  54.                         List<Integer> left = helper(arr, target, start, i);
    . Waral 鍗氬鏈夋洿澶氭枃绔,
  55.                         List<Integer> right = helper(arr, target, i + 1, end);
  56.                         for (int l : left) {
  57.                                 for (int r : right) { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  58.                                         res.add((l + r));
  59.                                         res.add((l * r));
  60.                                         if (r != 0) {
  61.                                                 res.add((l / r));
  62.                                         }
  63.                                         res.add((l - r));
  64.                                 }
  65.                         }
  66.                 }
  67.                 return res;
  68.         }
  69. }
复制代码
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-6 19:03

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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