1. 程式人生 > 實用技巧 >227.基本計算器 II

227.基本計算器 II

實現一個基本的計算器來計算一個簡單的字串表示式的值。

字串表示式僅包含非負整數,+, - ,*,/ 四種運算子和空格。 整數除法僅保留整數部分。

示例1:

輸入: "3+2*2"
輸出: 7
示例 2:

輸入: " 3/2 "
輸出: 1
示例 3:

輸入: " 3+5 / 2 "
輸出: 5

思路:

  • 對於 -3*5 看作:(-3) * 5,將 -3 存入棧中,前一個操作符為 * ,則從棧頂取出 -3。
  • 用一個變數,記錄前一個操作符 ( + - * / ),是前一個,而不是當前操作符;
  • 當前一個操作符為 +,- 時,直接存入棧中;
  • 當前一個字元為 *,/ 時,取出棧頂元素,與當前的 number 操作後,壓入棧中;
  •累加棧中的元素,得到最終結果。

class Solution {
    public int calculate(String s) {
        Stack<Integer> stack = new Stack<>();
        int n = s.length(), number = 0;
        char sign = '+'; // 初始為正,記錄前一個操作符
        for(int i = 0; i < n; i++){
            char c = s.charAt(i);
            if(c == ' ' && i != n-1) continue
; //最後一個字元是空格時,不能跳過! if(c >= '0' && c <= '9') number = number * 10 + (c - '0'); if(c == '-' || c == '+' || c == '*' || c == '/' || i == n-1){ if(sign == '+') stack.push(number); else if(sign == '-') stack.push(-number);
else if(sign == '*') stack.push(stack.pop() * number); else if(sign == '/') stack.push(stack.pop() / number); sign = c; number = 0; } } int res = 0; while(!stack.isEmpty()) res += stack.pop(); //累加棧中的數 return res; } }