227. Basic Calculator II
class Solution {
    public int calculate(String s) {
        char sign = '+';
        Stack<Integer> stack = new Stack<>();
        int num = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isDigit(c)) {
                num = num*10 + (s.charAt(i) - '0');
            }
            // i == s.length()-1 -> after have number, immideiatly cal it!!
            if (!Character.isDigit(c) && c != ' ' || i == s.length()-1) {
                if (sign == '+') {
                    stack.push(num);
                } else if (sign == '-') {
                    stack.push(-num);
                } else if (sign == '*') {
                    int prev = stack.pop();
                    stack.push(prev * num);
                } else if (sign == '/') {
                    int prev = stack.pop();
                    stack.push(prev / num);
                }
                sign = c;
                num = 0;
            }
        }
        
        int result = 0;
        while (!stack.isEmpty()) {
            result += stack.pop();
        }
        return result;
    }
}
/**
if + or - just put into stack
* or / pop from stack to cal with current val
3/2 = 1 
  
4
3
at last pop all number in stack to add together
3+3+
 */Last updated
Was this helpful?