227.基本計算器 II
阿新 • • 發佈:2020-10-21
實現一個基本的計算器來計算一個簡單的字串表示式的值。
字串表示式僅包含非負整數,+, - ,*,/ 四種運算子和空格。 整數除法僅保留整數部分。
示例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; } }