Basic Calculator II
Problem
Given a string s
which represents an expression, evaluate this expression and return its value.
The integer division should truncate toward zero.
(The difference between this and Basic Calculator I is that in here we have all the operands and no paranthese, while in Basic Calculator I we only had '+' and '-' and parantheses.)

Thought Process
Multiplication and division need to be handled before addition and subtraction
Once again here we are saving the previous sign like in Basic Calculator I

Solution
class Solution:
def calculate(self, s: str) -> int:
stack = []
numbers = set("0123456789")
num = 0
operands = "*+-/"
sign = '+'
for i in range(len(s)):
if s[i] in numbers:
num = 10*num + int(s[i])
if s[i] in operands or i == len(s)-1:
if sign == '+':
stack.append(num)
elif sign == '-':
num*=-1
stack.append(num)
elif sign == '*':
prev = stack.pop()
stack.append(prev*num)
elif sign == '/':
prev = stack.pop()
stack.append(int(prev/num))
num = 0
sign = s[i]
return sum(stack)
Time Complexity
Time: O(n)
Space: O(n)
Last updated
Was this helpful?