棧---逆波蘭表示式求值
阿新 • • 發佈:2018-12-21
- 題目
根據逆波蘭表示法,求表示式的值。
有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭表示式。
說明:
整數除法只保留整數部分。
給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。 - 示例
輸入: ["2", "1", "+", "3", "*"]
輸出: 9
解釋: ((2 + 1) * 3) = 9
輸入: ["4", "13", "5", "/", "+"]
輸出: 6
解釋: (4 + (13 / 5)) = 6
輸入: ["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
- 程式碼實現
思路:運算元入棧;運算子取運算元棧元素執行相應運算,然後將結果如棧。
import java.util.Stack; public class Solution { public int evalRPN(String[] tokens) { Stack<Integer> stack = new Stack<>(); for (int i=0;i<tokens.length;i++){ String str = tokens[i]; if(str.equals("+")){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num1+num2); }else if(str.equals("-")){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num2-num1); }else if(str.equals("*")){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num2*num1); }else if(str.equals("/")){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num2/num1); }else{ int num = Integer.parseInt(str); stack.push(num); } } return stack.peek(); } }