LeetCode 227 Basic Calculator II - Stack(Med, Java, O(n))


Problem Description
LeetCode 227 (Basic Calculator II) asks us to evaluate a mathematical expression containing integers and the operators +
, -
, *
, and /
. The expression is given as a string with possible spaces, and we need to follow standard operator precedence rules where multiplication and division have higher precedence than addition and subtraction.
Key constraints:
- No parentheses in the expression
- All intermediate results fit within a 32-bit integer
- Division truncates toward zero
- Input string is valid
Example: "3+2*2"
should return 7
, not 10
, because multiplication has higher precedence.
Core Algorithm Walkthrough
The solution uses a stack-based approach to handle operator precedence elegantly. Instead of complex parsing, it processes operators immediately while deferring addition/subtraction operations.
Key Insight
- High precedence operators (
*
,/
): Process immediately by operating on the stack's top element - Low precedence operators (
+
,-
): Defer by pushing values to the stack for later summation
Algorithm Steps
Initialize: Stack, current number (
num = 0
), and previous operator (operator = '+'
)Process each character:
- If digit: Build the current number:
num = num * 10 + (c - '0')
- If operator or end of string: Process the previous operator with current number:
+
: Pushnum
to stack-
: Push-num
to stack*
: Pop from stack, multiply withnum
, push result back/
: Pop from stack, divide bynum
, push result back
- Reset
num = 0
and updateoperator = c
- If digit: Build the current number:
Final calculation: Sum all values remaining in the stack
Example Trace: "3+2*2"
i=0: c='3' → num=3
i=1: c='+' → Process prev '+' with num=3 → stack=[3], operator='+', num=0
i=2: c='2' → num=2
i=3: c='*' → Process prev '+' with num=2 → stack=[3,2], operator='*', num=0
i=4: c='2' → num=2
i=5: End → Process prev '*' with num=2 → pop 2, compute 2*2=4 → stack=[3,4]
Final: sum stack = 3+4 = 7
Complexity Analysis
- Time Complexity: O(n) where n is the length of the input string. Each character is processed once.
- Space Complexity: O(n) in the worst case for the stack. In an expression with only addition/subtraction, each number gets pushed to the stack.
Full Solution (Java)
class Solution {
public int calculate(String s) {
Stack<Integer> st = new Stack<>();
int num = 0;
char operator = '+';
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
num = num * 10 + (c - '0');
}
if (isOperator(c) || i == s.length() - 1) {
if (operator == '+') st.push(num);
else if (operator == '-') st.push(-num);
else if (operator == '*') st.push(st.pop() * num);
else if (operator == '/') st.push(st.pop() / num);
num = 0;
operator = c;
}
}
int ans = 0;
while (!st.isEmpty()) {
ans += st.pop();
}
return ans;
}
private boolean isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
}
Subscribe to my newsletter
Read articles from Anni Huang directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Anni Huang
Anni Huang
I’m Anni Huang, an AI researcher-in-training currently at ByteDance, specializing in LLM training operations with a coding focus. I bridge the gap between engineering execution and model performance, ensuring the quality, reliability, and timely delivery of large-scale training projects.