题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个字符串,其中是一个有加减乘除运算的数学表达式(无括号),要求表达式结果。

思路分享

  • 【Leetcode Daily】224基本计算器 类似,中心主旨是简化表达式为加法。通过栈来存储待加数字,然后设置一个变量存储上一个符号(这样子就可以在遇到下一个符号时,用已有的栈末尾和正在遍历数字进行上一次运算),最后计算栈的总和就是表达式答案。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution:
def calculate(self, s: str) -> int:
nums = []
pre_opr = "+" # 上一次符号,默认 0 + 开始
n = len(s)
num = 0
for i, c in enumerate(s):
if c.isdigit():
num *= 10
num += int(c)
if i == n-1 or c in "+-*/":
if pre_opr == "+":
nums.append(num)
elif pre_opr == "-":
nums.append(-num)
elif pre_opr == "*":
nums.append(nums.pop() * num)
elif pre_opr == "/":
nums.append(int(nums.pop() / float(num)))
num = 0
pre_opr = c
# print(nums)

return sum(nums)