题目链接: https://leetcode-cn.com/problems/basic-calculator-ii

难度:中等

通过率:33.2%

题目描述:

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+-*/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例:

示例 1:

输入: "3+2*2"
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5

说明:

  • 你可以假设所给定的表达式都是有效的。
  • 不要 使用内置的库函数 eval

思路:

字符串

先把乘法先算出来,再考虑加减

两种写法,第一种容易理解,第二种简洁

如有疑惑,欢迎留言~


相关题型:224. 基本计算器

代码:

第一种

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

第二种

class Solution:
def calculate(self, s: str) -> int:
# 小trick
s += "+0"
stack = []
num = 0
# 记录前一个符号
sign = "+"
for c in s:
if c.isdigit():
num = num * 10 + int(c)
elif c in {"+", "-", "*", "/"}:
#print(sign, num)
if sign == "+":
stack.append(num)
elif sign == "-":
stack.append(-num)
elif sign == "*":
stack[-1] = stack[-1] * num
elif sign == "/":
# 解决python的负数下取整
if stack[-1] < 0:
stack[-1] = -(-stack[-1] // num)
else:
stack[-1] = stack[-1] // num
sign, num = c, 0
return sum(stack)

[LeetCode] 227. 基本计算器 II的更多相关文章

  1. LeetCode 227. 基本计算器 II(Basic Calculator II)

    227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...

  2. Java实现 LeetCode 227 基本计算器 II(二)

    227. 基本计算器 II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: ...

  3. Leetcode 227.基本计算器II

    基本计算器II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  . 整数除法仅保留整数部分. 示例 1: 输入: " ...

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

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

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

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

  6. LeetCode#227.Basic Calculator II

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

  7. 【LeetCode】基本计算器II

    [问题]实现一个基本的计算器来计算一个简单的字符串表达式的值.字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  .整数除法仅保留整数部分. 输入: "3+2*2" ...

  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 ...

随机推荐

  1. https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入后如何添加到自己的项目

    将 https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入到界面后,如何将这个项目添加到自己的项目里面. 然后再自 ...

  2. 【Python】爬虫汇总

    主要流程: 获取url下载网页从网页中找寻自己需要的保存(解析+输出)主要概念URL:分大小写统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联 ...

  3. Codeforces 343D Water Tree & 树链剖分教程

    原题链接 题目大意 给定一棵根为1,初始时所有节点值为0的树,进行以下三个操作: 将以某点为根的子树节点值都变为1 将某个节点及其祖先的值都变为0 *询问某个节点的值 解题思路 这是一道裸的树链剖分题 ...

  4. HDU1176-免费馅饼(DP)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. Docker入门-Dockerfile的使用

    使用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,这个脚本就是Dockerfile. Dockerfile ...

  6. 第九周课程总结 & 实验报告(七)

    第九周课程总结 一.多线程 1.线程的状态 2.线程操作的相关方法 二.Java IO 1.操作文件的类---File ()基本介绍 ()使用File类操作文件 .RandomAccessFile类 ...

  7. 界面之下:还原真实的 MV* 模式

    界面之下:还原真实的MV*模式 作者:戴嘉华 转载请注明出处并保留原文链接( https://github.com/livoras/blog/issues/11 )和作者信息. 目录: 前言 MVC ...

  8. 客户端浏览器向服务器发起http请求的全过程

    http协议的参考:http://blog.csdn.net/hefeng6500/article/details/75081047 (1)浏览器先搜索自身的DNS缓存 (2)操作系统搜索自身的DNS ...

  9. .slideUp()

    .slideUp() Effects > Sliding .slideUp( [duration ] [, complete ] )Returns: jQuery Description: Hi ...

  10. SQL Server AlwaysOn原理简介

    SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例,数据库镜像和日志传送的单位是单个用户数据库,而A ...