leetcode-hard-array- 227. Basic Calculator II
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的更多相关文章
- 【LeetCode】227. Basic Calculator II 解题报告(Python)
[LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...
- leetcode 224. Basic Calculator 、227. Basic Calculator II
这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...
- 【LeetCode】227. Basic Calculator II
Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The express ...
- [LeetCode] 227. Basic Calculator II 基本计算器之二
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- Leetcode solution 227: Basic Calculator II
Problem Statement Implement a basic calculator to evaluate a simple expression string. The expressio ...
- [LeetCode] 227. Basic Calculator II 基本计算器 II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- LeetCode#227.Basic Calculator II
题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...
- Java for LeetCode 227 Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- (medium)LeetCode 227.Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- 224. Basic Calculator + 227. Basic Calculator II
▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz. ▶ 自己的全 ...
随机推荐
- 关于MVC与MVP的理解
1. MVC的理解误区 理解误区: 1. 认为Model是指失血模型的实体类(Entity),是作为View和Controller之间的传输数据. 2. 把业务逻辑全部放在Controller端,认为 ...
- 第三篇.python编辑器和集成环境01
修改python的镜像源 使用pip可以提高网速 \Lib\site-packages\pip\models\index.py文件,将PYPI的值改为你所需要的镜像源即可,例如改为豆瓣镜像源: #Py ...
- CentOS配置python操作
centos7.3 安装python 查看当前python情况[root@localhost /]# cd /[root@localhost bin]# cd /usr/bin[root@localh ...
- 使用ViewPager实现导航
1.使用PageAdapter适配器 2.使用FragmentPageAdapter适配器 监听事件: OnPageChangeListener 百度云:链接: http://pan.baidu.co ...
- Zabbix Agent 安装指南和 Zabbix Server 设置自动发现
Zabbix Agent分为两种模式,被动模式(Passive)和主动模式( 我们实验在node1.yulongjun.com 和node2.yulongjun.com上分别配置Zabbix Agen ...
- 基于Kibana的可视化监控报警插件sentinl入门
sentinl是什么 Kibi/Kibana Alert & Reporting App Watching your data, 24/7/365 sentinl是一个免费的kibana预警与 ...
- linux高级技巧:heartbeat+lvs
linux高级技巧:heartbeat+lvs Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 He ...
- Java-WEB开发常用方法整理
/** * 此类中收集Java编程中WEB开发常用到的一些工具. * 为避免生成此类的实例,构造方法被申明为private类型的. * @author */ import java.io.IOExce ...
- JAVA_GET请求URL
import java.io.IOException; import net.sf.json.JSONObject; import org.apache.commons.httpclient.Defa ...
- 【环境配置】出现:Microsoft Visual C++ 14.0 is required 的解决方案
参考blog https://download.csdn.net/download/amoscn/10399046 https://blog.csdn.net/weixin_42057852/arti ...