基本计算器 II1
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
class Solution:
def calculate(self, s: str) -> int:
# 去除空格
s=s.replace(' ','')
n=[]
a=''
# 0至9的自然数字典
nl={str(i):True for i in range(10)}
# 按加号+运算符分离
# 减号-运算符和后面连接数值组成一个负数
for m in s:
if nl.get(m, False):
a+=m
elif m=='+':
if a!='':
n.append(a)
a=''
elif m=='-':
if a!='':
n.append(a)
a='-'
elif m=='*':
a+=m
elif m=='/':
a+=m
if a!='':
n.append(a)
# 按加号+运算符分离出的数组,只包含数值(包含负数),乘除法运算表达式
# 这样只需逐个累加数值或运算符表达式的值
b=0
c=0
for m in n:
# 按乘除*/运算符分离
# 只包含乘号*运算符
if '*' in m and not '/' in m:
na=m.split('*')
b=1
for num in na:
b*=int(num)
b=int(b)
# 只包含除号/运算符
elif '/' in m and not '*' in m:
na=m.split('/')
b=int(na[0])
for i in range(1,len(na)):
b/=int(na[i])
b=int(b)
# 同时包含乘除*/运算符
elif '/' in m and '*' in m:
na=m.split('*')
if '/' in na[0]:
naa=na[0].split('/')
b=int(naa[0])
for i in range(1,len(naa)):
b/=int(naa[i])
b=int(b)
else:
b=int(na[0])
for i in range(1, len(na)):
if '/' in na[i]:
naa=na[i].split('/')
b*=int(naa[0])
for j in range(1,len(naa)):
b/=int(naa[j])
b=int(b)
else:
b*=int(na[i])
b=int(b)
else:
b=int(m)
# 所有按加号+运算符分离出的元素之和:c
c+=b
c=int(c)
return c
题目来源:力扣LeetCode ↩︎