表达式求值

题目:
https://leetcode-cn.com/problems/basic-calculator-ii/

class Solution {
     public int calculate(String s) {
        LinkedList<Integer> integers = new LinkedList<>();
        LinkedList<Character> ops = new LinkedList<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                continue;
            }
            if (!Character.isDigit(c)) {
                ops.push(c);
                continue;
            }
            int number = c - '0';
            while (i + 1 < s.length() && Character.isDigit(s.charAt(i + 1))) {
                i++;
                number = number * 10 + s.charAt(i) - '0';
            }

            if (!ops.isEmpty()) {
                char lastOp = ops.peek();
                if (lastOp == '*') {
                    ops.pop();
                    integers.push(integers.pop() * number);
                    continue;
                } else if (lastOp == '/') {
                    ops.pop();
                    integers.push(integers.pop() / number);
                    continue;
                }
            }
            integers.push(number);
        }

        int res = integers.removeLast();
        while (!ops.isEmpty()) {
            char lastOp = ops.removeLast();
            if (lastOp == '+') {
                res += integers.removeLast();
            } else {
                res -= integers.removeLast();
            }
        }
        return res;
    }
}

发布于 2020/08/23 浏览