224. Basic Calculator

class Solution {
    public int calculate(String s) {
        // levelResult used to store the sum in parentheses
        int levelResult=0;
        int num = 0;
        // the sign of current num (number after the non-digit character)
        int sign =1;
        // stack to store the sum (levelResult) of different parentheses level
        Deque<Integer> stack = new LinkedList<>();
        for(char c : s.toCharArray()){
            switch(c){
                case '+':
                    levelResult +=sign*num;
                    sign=1;
                    num=0;
                    break;
                case '-':
                    levelResult +=sign*num;
                    sign=-1;
                    num=0;
                    break;      
                case ' ':
                    break;
                case '(':
                    stack.push(levelResult);
                    levelResult=0;
                    stack.push(sign);
                    sign=1;
                    break;
                case ')':
                    levelResult +=num*sign;
                    levelResult = stack.pop()*levelResult+stack.pop();
                    num=0;
                    sign=1;
                    break;
                default:
                    num=c-'0'+num*10;
            }
        }
        return levelResult+num*sign;
    }
}

Last updated