📅  最后修改于: 2023-12-03 14:57:48.532000             🧑  作者: Mango
给定一个字符串,其中包含正整数、负整数、加号 + 和减号 -,请编写一个函数,计算该表达式的值。
例如:
calculate("1 + 2") // 3
calculate("2-1 + 2 ") // 3
calculate("(1+(4+5+2)-3)+(6+8)") // 23
注意:
可以使用栈来模拟计算过程,遍历字符串时,将数字和运算符压入栈中,遇到运算符时,从栈中弹出两个数字进行运算,并把新的结果压回栈中。当遍历完字符串时,栈里只剩下一个值,即表达式的结果。
需要注意的是,字符串中可能存在连续的数字,需要考虑将它们合并成一个整数。
def calculate(s: str) -> int:
stack = []
num = 0
sign = "+"
for i in range(len(s)):
if s[i].isdigit():
num = num * 10 + int(s[i])
if (not s[i].isdigit() and not s[i].isspace()) or i == len(s) - 1:
if sign == "+":
stack.append(num)
elif sign == "-":
stack.append(-num)
elif sign == "*":
stack.append(stack.pop() * num)
else:
stack.append(int(stack.pop() / num))
sign = s[i]
num = 0
return sum(stack)
本题主要考察对栈的理解和处理问题的能力,需要注意字符串中连续数字的处理。时间复杂度为 O(n),空间复杂度为 O(n)。