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" ...
随机推荐
- C#WinForm 窗体单例模式 反射单例
做了个mdi窗体 原以为指定一下MDIParent就可以了 没想到多次点击会出现多个窗体的现像 所以用到了单例模式 做法是这样的(学习出处:连接) 1.在子窗体声明一个子窗体类型的私有静态变量 并把子 ...
- ps--窗口配置
移动工具设置 v 选择图层自动选择不勾 图层ctrl + 左键 视图设置智能参考线标尺 Ctrl+r 窗口设置 关闭 库 颜色 打开 信息 字符 图层 历史记录 信息 面板选项 鼠标单位 像素 rgb ...
- Quartz CronTrigger 整配置说明
Quartz cron 表达式的格式向下支持到秒级别的计划,而 UNIX cron 计划仅支持至分钟级. Quartz用cron 表达式存放执行计划,引用了cron表达式的CronTrigger在计 ...
- 前端 JavaScript 基础
内容目录: 一.JavaScript介绍 二.基础语法 2.1 变量 2.2 数据类型 2.3 流程控制 2.5 函数的全局变量和局部变量 2.6 作用域 2.7 词法分析 ...
- 利用left join 筛选B表中不包含A表记录
select A.key from A LEFT JOIN B ON A.KEY=B.KEY WHERE B.FIELD IS NULL;
- boost 大小端转换
boost 中有一个edmian 里面有转换函数模板 native_to_little<T> 本地转换为小端 native_to_bit<T> 本地转换为大端
- centos7.x部署php7.0、mysql
1.安装httpd yum install httpd systemctl start httpd.service #启动命令 systemctl stop httpd.service #停止命令 s ...
- leetcode-126-单词接龙
题目描述: class Solution: def findLadders(self, beginWord: str, endWord: str, wordList: list) -> list ...
- 二分法的应用:POJ1064 Cable master
/* POJ1064 Cable master 时间限制: 1000MS 内存限制: 10000K 提交总数: 58217 接受: 12146 描述 Wonderland的居民已经决定举办地区性编程比 ...
- vim 详解
Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器. 它的作用是建立.编辑.显示文本文件. Vim的几种模式 正常模式: 可以使用快捷键命令,或按:输入命令行. 插入模 ...