Basic Calculator I — Stack for Sign and Parentheses
Advertisement
Problem 293 · Basic Calculator I
Difficulty: Hard · Pattern: Stack + Sign Tracking
Evaluate expression with +, -, and parentheses (no *, /).
Solutions
# Python
def calculate(s):
stack = []
result = 0; num = 0; sign = 1
for c in s:
if c.isdigit():
num = num*10 + int(c)
elif c == '+':
result += sign * num; num = 0; sign = 1
elif c == '-':
result += sign * num; num = 0; sign = -1
elif c == '(':
# Save current result and sign
stack.append(result); stack.append(sign)
result = 0; sign = 1
elif c == ')':
result += sign * num; num = 0
result *= stack.pop() # multiply by sign before (
result += stack.pop() # add saved result before (
result += sign * num
return result
// Java
public int calculate(String s) {
Deque<Integer> stack=new ArrayDeque<>();
int result=0, num=0, sign=1;
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) num=num*10+c-'0';
else if (c=='+') { result+=sign*num; num=0; sign=1; }
else if (c=='-') { result+=sign*num; num=0; sign=-1; }
else if (c=='(') { stack.push(result); stack.push(sign); result=0; sign=1; }
else if (c==')') { result+=sign*num; num=0; result*=stack.pop(); result+=stack.pop(); }
}
return result+sign*num;
}
Complexity
- Time: O(n)
- Space: O(n)
Advertisement