实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
分析:直接法,更具运算法则,先计算乘除法, 在计算加减法。
class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
eg: a = " 3+5 / 2 "
"""
#将字符串放到栈中,数字变为int类型,字符不变。
s = s.replace(""," ")
num, tmp = '',[]
for i in s:
if i in "+-*/":
tmp.append(int(num))
tmp.append(i)
num = ''
else:
num += i
tmp.append(int(num))
if len(tmp) == 1:
return tmp[0]
#先计算乘除法
stack, i = [],0
while i < len(tmp):
stack.append(i)
if tmp[i] in "*/":
v = stack[-2] * tmp[i+1] if tmp[i] == '*' else stack[-2] // tmp[i+1]
stack = stack[:-2]
stack.append(v)
i += 1
#后计算加减法
res = [stack[0]]
for i in range(1, len(stack)-1):
if stack[i] == '+':
res.append(stack[i+1])
if stack[i] == '-':
res.append(-stack[i+1])
return sum(res)