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" ...
随机推荐
- JAVA集合--Iterator接口
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 上一篇文章中我在集合元素的遍历中已经有涉及到I ...
- [BOI2009]Radio Transmission 无线传输
题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入输出格式 输入格式: 第一行给出字符串的长度,1 < L ≤ 1, ...
- 笔记-Linux包管理命令
一.apt, apt-get, dpkg命令 apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统.使用apt-ge ...
- JS Window对象 计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码。
计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...
- 读书笔记---《Docker 技术入门与实践》---其一
一.镜像1.1.搜索 搜索所有nginx镜像 $ docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Officia ...
- Cacti 发送警告邮件
Cacti版本: 0.8.8a 目的:监听CPU 高于1个设定值时发送警告邮件(范例这一台主机有1颗实体CPU,总共2核心) 需要安装的插件: 1.1. thold Threshold,下载使用的是v ...
- Shell中整数自增的几种方式
Shell中整数自增的几种方式 2016年08月27日 19:07:40 杰瑞26 阅读数:2816 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...
- mac系统下通过安装包的形式安装mongdb
下载地址 mongoDB mongoDB 图形化管理软件 MongoDB Compass 下载完成后,进行解压,解压后的文件进行重命名 mongodb 然后前往/usr/local,将mongodb文 ...
- NX二次开发-UFUN查询体的类型为实体还是片体UF_MODL_ask_body_type
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...
- HDU3342:判断有向图中是否存在3元环-Tarjan或拓扑排序
题目大意: 给你一个关系图,判断是否合法.每个人都有师父和徒弟,可以有很多个: 若A是B的师父,B是C的师父,则A也算C的师父. 不合法: 1) . 互为师徒:(有回路) 2) .你的师父是你徒弟 ...