Problem 224

Posted by Ruizhi Ma on October 25, 2020

Solution URL

https://leetcode.com/submissions/detail/413190050/

代码

class Solution {
    public int calculate(String s) {
        //ans: https://www.youtube.com/watch?v=GpLJMW1IGbw
        Stack<Integer> stack = new Stack<>();
        int number = 0;
        int sign = 1;
        int subsum = 0;

        int i = 0;
        while( i < s.length()){
            char c = s.charAt(i);

            if(Character.isDigit(c)){
                //得到数字
                number = 10 * number + (c - '0');
            } else if(c == '+'){
                subsum += number * sign;
                //还原符号
                sign = 1;
                number = 0;
            } else if( c == '-'){
                subsum += number * sign;
                sign = -1;
                number = 0;
            } else if( c == '('){
                stack.push(subsum);
                subsum = 0;
                number = 0;
                stack.push(sign);
                sign = 1;
            } else if( c == ')'){
                subsum += number * sign;
                number = 0;
                sign = 1;
                subsum *= stack.pop();
                subsum += stack.pop();
            }
            i++;
        }

        if(number != 0){
            subsum += number * sign;
        }

        return subsum;
    }
}