Leetcode 224.基本计算器
1 题目描述(Leetcode题目链接)
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。
输入: "1 + 1"
输出: 2
输入: " 2-1 + 2 "
输出: 3
输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数 eval。
2 题解
用栈,比较粗暴地求。
class Solution:
def calculate(self, s: str) -> int:
s = '(' + s + ')'
stack = []
for c in s:
if c == ' ': continue
if c.isdigit():
if stack and type(stack[-1]) is int:
stack[-1] = stack[-1]*10 + int(c)
else:
stack.append(int(c))
elif c == ')':
num = 0
while len(stack) > 1:
n = stack.pop()
symbol = stack.pop()
if symbol == '(':
num += n
stack.append(num)
break
if symbol == '-':
num -= n
else:
num += n
else:
stack.append(c)
return stack[0]