[LC] 227. Basic Calculator II

Implement a basic calculator to evaluate a simple expression string.

The expression string contains only non-negative integers, +-*/ operators and empty spaces . The integer division should truncate toward zero.

Example 1:

Input: "3+2*2"
Output: 7

Example 2:

Input: " 3/2 "
Output: 1

Example 3:

Input: " 3+5 / 2 "
Output: 5

class Solution {
    public int calculate(String s) {
        char[] charArr = s.toCharArray();
        LinkedList<Integer> stack = new LinkedList<>();
        char sign = '+';
        int num = 0;
        for (int i = 0; i < charArr.length; i++) {
            char cur = charArr[i];
            if (Character.isDigit(cur)) {
                num = cur - '0';
                while (i + 1 < charArr.length && Character.isDigit(charArr[i + 1])) {
                    num = 10 * num + charArr[i + 1] - '0';
                    i += 1;
                }
            }
            // add sign and assign sign to number
            if (cur != ' ' && !Character.isDigit(cur) || i == charArr.length - 1) {
                if (sign == '+') {
                    stack.offerFirst(num);
                } 
                if (sign == '-') {
                    stack.offerFirst(-num);
                }
                if (sign == '*') {
                    stack.offerFirst(stack.pollFirst() * num);
                } 
                if (sign == '/') {
                    stack.offerFirst(stack.pollFirst() / num);
                }
                sign = cur;
                num = 0;
            } 
        }
        int res = 0;
        for (int i: stack) {
            res += i;
        }
        return res;
    }
}

猜你喜欢

转载自www.cnblogs.com/xuanlu/p/12791647.html
今日推荐