leetcode-227-基本计算器②
题目描述:

方法一:中缀转后缀
#!_*_coding:utf-8_*_
class Solution:
def calculate(self, s: str) -> int:
def in_to_suffix(s):
priority = {'+': 1, '-': 1, '*': 2, '/': 2}
s.replace(" ", "")
result = []
stack = []
for j,i in enumerate(s):
if i in priority.keys():
while stack and stack[-1] in priority.keys() and priority[i] <= priority[stack[-1]]:
result.append(stack.pop())
stack.append(i)
else:
if j!=0 and s[j-1].isdigit():
i = int(result.pop())*10+int(i)
result.append(i)
while stack:
result.append(stack.pop())
print(result)
return result def evalRPN(tokens):
f1 = lambda a, b: a + b
f2 = lambda a, b: a - b
f3 = lambda a, b: a * b
f4 = lambda a, b: a // b
maps = {'+': f1, '-': f2, '*': f3, '/': f4}
stack = []
for token in tokens:
if token in maps:
a = stack.pop()
b = stack.pop()
stack.append(maps[token](b, a))
else:
stack.append(int(token))
return stack[-1] s = s.replace(" ","")
res = in_to_suffix(s)
return evalRPN(res)
方法二:栈
class Solution:
def calculate(self, s: str) -> int:
stack = []
i = 0
while i < len(s):
if s[i].isdigit():
tmp = 0
while i < len(s) and s[i].isdigit():
tmp = tmp * 10 + int(s[i])
i += 1
stack.append(tmp)
# 如果栈中有乘除,先算出来
while len(stack) > 1 and stack[-2] in {"*", "/"}:
stack.pop()
opt = stack.pop()
if opt == "*":
stack.append(stack.pop() * tmp)
else:
stack.append(stack.pop() // tmp)
elif s[i] in { "*", "/", "+", "-"}:
stack.append(s[i])
i += 1
else:
i += 1
res = 0
sign = 1
for t in stack:
if t == "+":
sign = 1
elif t == "-":
sign = -1
else:
res += sign * t
return res
leetcode-227-基本计算器②的更多相关文章
- LeetCode 227. 基本计算器 II(Basic Calculator II)
227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...
- Java实现 LeetCode 227 基本计算器 II(二)
227. 基本计算器 II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: ...
- Leetcode 227.基本计算器II
基本计算器II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: " ...
- [LeetCode] 227. 基本计算器 II
题目链接: https://leetcode-cn.com/problems/basic-calculator-ii 难度:中等 通过率:33.2% 题目描述: 实现一个基本的计算器来计算一个简单的字 ...
- Leetcode 224/227/772 计算器
题目描述 Leetcode 224 Leetcode 224: 这里想让我们实现一个基础的计算器,来计算给定的字符串. 给定的字符串中包含 ( ) + - 和非负整数和空格. # Example 1: ...
- [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 contains ...
- LeetCode#227.Basic Calculator II
题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...
- Leetcode 224.基本计算器
基本计算器 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1 ...
- 【LeetCode】基本计算器II
[问题]实现一个基本的计算器来计算一个简单的字符串表达式的值.字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 .整数除法仅保留整数部分. 输入: "3+2*2" ...
随机推荐
- Docker搭建 oracle
1-1.docker run -d -p 11521:1521 --name sf2_oracle11g 镜像ID # -p:端口映射,此处映射主机端口 1-2.查看启动 docker logs - ...
- 209. Minimum Size Subarray Sum【滑动窗口】
Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...
- spring boot Swagger2(version=2.7.0) 注解@ApiImplicitParam的属性dataType值为”自定义泛型“应用
注解: @ApiImplicitParams @ApiImplicitParam name="需注解的API输入参数", value="接收参数的意义描述" ...
- sanic中间件和监听器
一:中间件 中间件是服务器在请求之前或之后执行的功能,他们可以用来修改修改用户定义处理函数的请求或相应. Sanic提供两种类型的中间件:请求和响应. 两者都是使用@app.middleware装饰器 ...
- 深度探索C++对象模型读书笔记-第七章站在对象模型的尖端
Template 模板是在编译时期而非执行时期被计算的.因此其不会带来效率的降低. 1: const Point<float> &ref = 0; 该语句会实例化一个Point的f ...
- CSIC_716_20191127【组合,封装、类的私有属性方法、property装饰器】
组合 what? 组合是指一个对象中,包含另一个或多个对象. why? 减少代码的冗余. How? 在类中加入其他类的对象,实现跨类对象之间的联动. 耦合度 软件设计要 高内聚 ...
- shell脚本中关于日期的操作
一.计算指定日期的前一天的日期 date -d "yesterday 20150401 " +%Y%m%d 二.如果获取当前日期的前一天 date -d " ...
- delphi xe10 网络连接
//当前网络状态(引用 Androidapi.JNI.Network.pas) IsConnected //连接 IsWiFiConnected //Wifi是否连接 IsMobileConnecte ...
- 最大字段和--GSS1 MUSHROOM ORZ
过于naive了= =作为一个知识点总结一下算了.主要就是合并.对于一个区间的最大字段和,可以分别事下面的两个区间的子段和,或者事左边的右边加右边的左边.然后搞一下 = = #include < ...
- java 接受带有中文的get请求文件下载时的问题
参数是接受到了 , debug的时候也能看的到 , 但是奇怪的是就是找不到文件 @ApiOperation(value = "文件下载/图片预览") @GetMapping(val ...