实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+
, -
,*
,/
四种运算符和空格
。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数
eval
。
class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
"""
# 数字变为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(tmp[i])
if tmp[i] == '*' or tmp[i] == '/':
v = stack[-2] * tmp[i + 1] if tmp[i] == '*' else stack[-2] // tmp[i + 1]
stack = stack[:-2]
stack.append(v)
i += 1
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)
class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
"""
stack = []
sign = '+'
num = 0
s += '+'
for i in s:
if i == ' ':
continue
if i in '0123456789':
num = num * 10 + int(i)
continue
if sign == '+':
stack.append(num)
elif sign == '-':
stack.append(-num)
elif sign == '*':
stack[-1] *= num
elif sign == '/':
stack[-1] = int(stack[-1] * 1.0 / num)
sign = i
num = 0
return sum(stack)