Calculator
772. Basic Calculator III
def calculate(self, s: str) -> int:
s.replace(' ', '')
l1, o1 = 0, 1
l2, o2 = 1, 1
sign = 0
i = 0
if s[0] in ('+', '-'):
sign = 1 if s[0] == '+' else -1
i+=1
# must ignore ')'
while i < len(s):
c = s[i]
if c.isdigit():
num = int(c)
while i+1 < len(s) and s[i+1].isdigit():
num = num*10 + int(s[i+1])
i+=1
if sign:
num *= sign
l2 = l2*num if o2 else int(l2/num)
sign = 0
elif c == '(':
count = 0
start = i
while i < len(s):
if s[i] == '(': count+=1
if s[i] == ')': count-=1
if count == 0: break
i+=1
num = self.calculate(s[start+1:i])
l2 = l2*num if o2 else int(l2/num)
elif c in ('*', '/'):
o2 = 1 if c == '*' else 0
elif c in ('+', '-'):
l1 = l1 + o1*l2
o1 = 1 if c == '+' else -1
l2, o2 = 1, 1
i+=1
return l1 + o1*l2 224. Basic Calculator I
227. Calculator II
Last updated