mycode  29.58%

class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
"""
def deal(data,flag):
data[:] = data[::-1]
while data:
if len(data) == 1:
break
a = data.pop()
if a == '+':
b = data.pop()
c = last + b
data.append(c)
elif a == '-':
b = data.pop()
c = last - b
data.append(c)
else:
last = a
return data[0] data = []
s = s.strip()
tokens = ['*','/','+','-']
l , r = 0, 0
for i in s:
if not i : continue
if i not in tokens:
r += 1
else:
data.append(int(s[l:r]))
r += 1
l = r
data.append(i)
data.append(int(s[l:r])) if '*' not in data and "/" not in data:
return deal(data,0) res = []
data[:] = data[::-1]
while data:
if '*' not in data and "/" not in data:
break
a = data.pop()
if a == '*':
b = data.pop()
res.pop()
c = last*b
data.append(c)
elif a == '/':
b = data.pop()
res.pop()
if b == 0:
return None
c = last // b
data.append(c)
else:
last = a
res.append(a)
return deal(res + data[::-1],1)

参考

import math
class Solution(object): def apply_pending_op(self, stack, pending_op, cur_int):
if pending_op is None:
stack.append(cur_int)
elif pending_op == '-':
stack.append(-cur_int)
elif pending_op == '+':
stack.append(cur_int)
elif pending_op == '*':
left = stack.pop()
right = cur_int
stack.append(left * right)
elif pending_op == '/':
left = stack.pop()
right = cur_int
# bypasses integer division rounding toward negative infinity
quo = int(float(left) / right)
stack.append(int(quo))
else:
raise ValueError(pending_op) def calculate(self, s):
"""
:type s: str
:rtype: int
"""
cur_int = 0
stack = []
pending_op = None
for c in s:
if c.isdigit():
cur_int = cur_int * 10 + int(c)
elif c in ('*', '/', '+', '-'):
self.apply_pending_op(stack, pending_op, cur_int)
cur_int, pending_op = 0, c self.apply_pending_op(stack, pending_op, cur_int) return sum(stack)

leetcode-hard-array- 227. Basic Calculator II的更多相关文章

  1. 【LeetCode】227. Basic Calculator II 解题报告(Python)

    [LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...

  2. leetcode 224. Basic Calculator 、227. Basic Calculator II

    这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...

  3. 【LeetCode】227. Basic Calculator II

    Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The express ...

  4. [LeetCode] 227. Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  5. Leetcode solution 227: Basic Calculator II

    Problem Statement Implement a basic calculator to evaluate a simple expression string. The expressio ...

  6. [LeetCode] 227. Basic Calculator II 基本计算器 II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  7. LeetCode#227.Basic Calculator II

    题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...

  8. Java for LeetCode 227 Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  9. (medium)LeetCode 227.Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  10. 224. Basic Calculator + 227. Basic Calculator II

    ▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz. ▶ 自己的全 ...

随机推荐

  1. git 多账户添加ssh秘钥

    生成秘钥的步骤: ssh-keygen -t rsa -C "xxxx@qq.com" 添加秘钥 在不同的域中添加相同的秘钥是没有问题的,比如 github.com / code. ...

  2. vue中优化CheckBox初始状态被选中问题

    <template> <div class="hello"> <h2>我是主界面</h2> <!-- <h2>我是 ...

  3. C# Monitor Wait()和Pulse()

    C# Monitor Wait()和Pulse()   1.Monitor.Wait方法当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有 ...

  4. 视频大文件分片上传(使用webuploader插件)

    背景 公司做网盘系统,一直在调用图片服务器的接口上传图片,以前写的,以为简单改一改就可以用 最初要求 php 上传多种视频格式,支持大文件,并可以封面截图,时长统计 问题 1.上传到阿里云服务器,13 ...

  5. php 获取网址参数

    echo "rewrite: ".$_GET["rewrite"]; echo "<br>SERVER_PORT: ".$_SE ...

  6. Delphi 使用Query组件的SQL查询

    樊伟胜

  7. 网络基础篇之NAT(原理)

    一.NAT的产生 由于网络的飞速发展和网络应用的极速增多,致使IPv4可用地址空间逐渐枯竭.尽管IPv6可以在根本上解决地址枯竭问题,但IPv4发展到IPv6还需要一个过渡,而这便产生了NAT. 二. ...

  8. Python3.8新特性--PositionalOnly参数

    “理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打拼职场的老司机. 不记得没关系,只需要知道:有这么一位老司机, 穿上西装带大家打拼职场! 操起键盘带大家打磨技术! ...

  9. 数据库——Oracle(8)

    1 标准SQL外连接(二) 1) 全外连接:查询所有表所有的数据 格式: select 别名1.*/列名,别名2.*/列名 from 表1 别名1 full outer join 表2 别名2 on ...

  10. ribbon负载均衡循环策略源码

    (原) 在用ribbon负载均衡取eureka注册中心中的地址时,默认采用循环策略,例如商品服务有3个,分别为URL1,URL2,URL3,那么在客户端第一次取时,会取到URL1,第二次取时取到URL ...