227. Basic Calculator II

字符串的每一位有三种情况,数字,符号和空格。

  1. 计算每个操作数num, 放入操作数栈stack
  2. 记录每个操作数之前的符号位sign,根据符号位的不同采用不同的操作。需要注意最后一个操作数也需要之前记录的符号位对其进行计算
  3. 最后将操作数栈中所有的结果相加
public int calculate(String s) {
    if (s == null || s.length() == 0) return 0;
    LinkedList<Integer> stack = new LinkedList<>();
    int num = 0;
    char sign = '+';
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if (Character.isDigit(ch)) {
            num = num * 10 + ch - '0';
        }
        if (!Character.isDigit(ch) && ch != ' ' || i == s.length() - 1) {
            if (sign == '+') stack.push(num);
            else if (sign == '-') stack.push(-num);
            else if (sign == '*') stack.push(stack.pop() * num);
            else stack.push(stack.pop() / num);
            sign = ch;
            num = 0; // clear oprands
        }
    }
    int sum = 0;
    for (int n : stack) {
        sum += n;
    }
    return sum;
}

results matching ""

    No results matching ""