Lc150_逆波蘭表示式求值
阿新 • • 發佈:2020-07-17
//根據 逆波蘭表示法,求表示式的值。 // // 有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭表示式。 // // // // 說明: // // // 整數除法只保留整數部分。 // 給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。 // // // // // 示例 1: // // 輸入: ["2", "1", "+", "3", "*"] //輸出: 9 //解釋: 該算式轉化為常見的中綴算術表示式為:((2 + 1) * 3) = 9 // // // 示例 2: // // 輸入: ["4", "13", "5", "/", "+"] //輸出: 6 //解釋: 該算式轉化為常見的中綴算術表示式為:(4 + (13 / 5)) = 6 // // // 示例 3: // // 輸入: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"] //輸出: 22 //解釋: //該算式轉化為常見的中綴算術表示式為: // ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 //= ((10 * (6 / (12 * -11))) + 17) + 5 //= ((10 * (6 / -132)) + 17) + 5 //= ((10 * 0) + 17) + 5 //= (0 + 17) + 5 //= 17 + 5 //= 22 // // // // 逆波蘭表示式: // // 逆波蘭表示式是一種字尾表示式,所謂字尾就是指算符寫在後面。 // // // 平常使用的算式則是一種中綴表示式,如 ( 1 + 2 ) * ( 3 + 4 ) 。 // 該算式的逆波蘭表示式寫法為 ( ( 1 2 + ) ( 3 4 + ) * ) 。 // // // 逆波蘭表示式主要有以下兩個優點: // // // 去掉括號後表示式無歧義,上式即便寫成 1 2 + 3 4 + * 也可以依據次序計算出正確結果。 // 適合用棧操作運算:遇到數字則入棧;遇到算符則取出棧頂兩個數字進行計算,並將結果壓入棧中。 // // Related Topics 棧 package leetcode.editor.cn; import java.util.Stack; //Java:逆波蘭表示式求值 public class P150EvaluateReversePolishNotation { public static void main(String[] args) { Solution solution = new P150EvaluateReversePolishNotation().new Solution(); // TO TEST String[] tokens = {"4","13","5","/","+"}; System.out.println(solution.evalRPN(tokens)); } //leetcode submit region begin(Prohibit modification and deletion) class Solution { //字尾表示式 轉 中綴表示式,利用棧 public int evalRPN(String[] tokens) { int res = 0; Stack<Integer> stack = new Stack<>(); for (int i = 0; i < tokens.length; i++) { switch (tokens[i]) { case "+": { Integer var1,var2; var1 = stack.pop(); var2 = stack.pop(); stack.push(var2 + var1); break; } case "-": { Integer var1,var2; var1 = stack.pop(); var2 = stack.pop(); stack.push(var2 - var1); break; } case "*": { Integer var1,var2; var1 = stack.pop(); var2 = stack.pop(); stack.push(var2 * var1); break; } case "/": { Integer var1,var2; var1 = stack.pop(); var2 = stack.pop(); stack.push(var2 / var1); break; } default: { stack.push(Integer.parseInt(tokens[i])); } } } return stack.pop(); } } //leetcode submit region end(Prohibit modification and deletion) }