一亩三分地论坛

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

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

24点

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

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

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

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

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.com/bbs

  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;
    . visit 1point3acres.com for more.
  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. . 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  16.                 for (List<Integer> candidate : lists) {
  17.                         List<Integer> list = helper(candidate, target, 0, arr.length - 1);
  18.                         for (int i : list) {
  19.                                 if (i == target) {.1point3acres缃
  20.                                         return true;. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  21.                                 }
  22.                         }
  23.                 }
  24.                 return false;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  25.         }
  26. -google 1point3acres
  27.         private void getPermutation(List<List<Integer>> lists,. From 1point 3acres bbs
  28.                         ArrayList<Integer> list, int[] arr, boolean[] visited) {
  29.                 if (list.size() == arr.length) {
  30.                         lists.add(new ArrayList<Integer>(list));. visit 1point3acres.com for more.
  31.                         return;
  32.                 }
  33.                 for (int i = 0; i < arr.length; i++) {
  34.                         if (visited[i] || i > 0 && arr[i] == arr[i - 1] && !visited[i - 1]) {
  35.                                 continue;
  36.                         }
  37.                         visited[i] = true;
  38.                         list.add(arr[i]);
  39.                         getPermutation(lists, list, arr, visited);
  40.                         list.remove(list.size() - 1);
  41.                         visited[i] = false;
  42.                 }
  43.         }

  44.         private List<Integer> helper(List<Integer> arr, int target, int start,
  45.                         int end) {
  46.                 List<Integer> res = new ArrayList<Integer>();
  47.                 if (start > end) {
  48.                         return res;
  49.                 }
  50.                 if (start == end) {
  51.                         res.add(arr.get(start));
  52.                         return res;.1point3acres缃
  53.                 }

  54.                 for (int i = start; i < end; i++) {
  55.                         List<Integer> left = helper(arr, target, start, i);
  56.                         List<Integer> right = helper(arr, target, i + 1, end);
  57.                         for (int l : left) {
  58.                                 for (int r : right) {
  59.                                         res.add((l + r));. 1point 3acres 璁哄潧
  60.                                         res.add((l * r));
  61.                                         if (r != 0) {
  62.                                                 res.add((l / r));
  63.                                         }
  64.                                         res.add((l - r));
  65.                                 }
  66.                         }. from: 1point3acres.com/bbs
  67.                 }
  68.                 return res;
  69.         }
  70. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| bobzhang2004 发表于 2016-4-3 02:31:06 | 显示全部楼层
adiggo 发表于 2016-4-3 02:27. Waral 鍗氬鏈夋洿澶氭枃绔,
所有数字必须用到么

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

使用道具 举报

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

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2017-1-17 15:29

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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