12
返回列表 发新帖
楼主: ManitobaFarmer
跳转到指定楼层
上一主题 下一主题
收起左侧

Zenefits 电面

🔗
Xin_walker 2015-5-2 01:30:06 | 只看该作者
全局:
ManitobaFarmer 发表于 2015-5-1 23:18
算,结果是 1 + 2 + 3 + (2 * 3) + 6 = 18

所以输入序列本身是有[]的吗?不然输入+, 1, 2, 3, *, 2, 3, 6, 就有[+, 1, 2, 3, [*, 2, 3], 6] 和[+, 1, 2, 3, [*, 2, 3], 6] 两种解释嘞?
回复

使用道具 举报

🔗
 楼主| ManitobaFarmer 2015-5-2 02:01:54 | 只看该作者
全局:
Xin_walker 发表于 2015-5-2 01:30
所以输入序列本身是有[]的吗?不然输入+, 1, 2, 3, *, 2, 3, 6, 就有[+, 1, 2, 3, [*, 2, 3], 6] 和[+, 1 ...

所以你需要自己解决这个问题。
回复

使用道具 举报

🔗
summerjx 2015-5-2 13:14:10 | 只看该作者
全局:
请问一下用queue怎么做呢
回复

使用道具 举报

🔗
hami33 2015-5-7 15:34:01 | 只看该作者
全局:
有人能分享一个code怎么写吗?
回复

使用道具 举报

🔗
johnnywsd 2015-5-12 12:14:20 | 只看该作者
全局:
  1. class Solution:

  2.     def eval(self, expr):
  3.         operator = expr[0]
  4.         expr = expr[1:]
  5.         evaled_expr = []
  6.         for it in expr:
  7.             if isinstance(it, list):
  8.                 evaled = self.eval(it)
  9.                 evaled_expr.append(evaled)
  10.             else:
  11.                 evaled_expr.append(it)
  12.         res = 0
  13.         if operator == '+':
  14.             res = sum(evaled_expr)
  15.         elif operator == '*':
  16.             res = 1
  17.             for it in evaled_expr:
  18.                 res *= it
  19.         elif operator == '-':
  20.             res = evaled_expr[0] if len(evaled_expr) > 0 else 0
  21.             for it in evaled_expr[1:]:
  22.                 res -= it
  23.         elif operator == '/':
  24.             res = evaled_expr[0] if len(evaled_expr) > 0 else 0
  25.             for it in evaled_expr[1:]:
  26.                 res /= it
  27.         return res
复制代码
Test Cases:
  1. import unittest
  2. from solution import Solution


  3. class Test(unittest.TestCase):

  4.     def test1(self):
  5.         s = Solution()
  6.         expr = ['+', 1, 2, ['*', 1, 3]]
  7.         res = s.eval(expr)
  8.         self.assertEqual(res, 6)

  9.     def test2(self):
  10.         s = Solution()
  11.         expr = ['+', 1, 2, ['*', 2, 3]]
  12.         res = s.eval(expr)
  13.         self.assertEqual(res, 9)

  14.     def test3(self):
  15.         s = Solution()
  16.         expr = ['+', ['*'], ['-'], ['/']]
  17.         res = s.eval(expr)
  18.         self.assertEqual(res, 1)

  19.     def test4(self):
  20.         s = Solution()
  21.         expr = ['+', 1, 2, ['*', 2, 3], ['-', 4, 5], ['/', 8, 2]]
  22.         res = s.eval(expr)
  23.         self.assertEqual(res, 12)

  24. if __name__ == '__main__':
  25.     unittest.main(verbosity=2)
复制代码
回复

使用道具 举报

🔗
huahuazhu 2015-5-17 07:21:24 | 只看该作者
全局:
没太想明白楼主的做法,我的想法跟johnnywsd 的类似,不过python我不熟,我用java的话就是这样一个class
class Expression{
char operator;
list<double> numbers;
list<Expression> innerExpression;
...
}

但是这样比较麻烦的是需要有一个parser 把类似 [+, 1, 2, 3, [*, 2, 3], 6]  的输入变成一个object

我没想明白怎么用“Expresssion 的List,再用一个Queue来决定问题”,我这种定义class的方法,貌似一个object就足够了
回复

使用道具 举报

🔗
sunnycat 2015-5-23 12:00:15 | 只看该作者
全局:
谢谢楼主,解法很clean
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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