逆波蘭表達式求值
阿新 • • 發佈:2018-07-22
遍歷 public pub char 解題思路 item 有效 tac clas
問題描述:
根據逆波蘭表示法,求表達式的值。
有效的運算符包括 +
, -
, *
, /
。每個運算對象可以是整數,也可以是另一個逆波蘭表達式。
說明:
- 整數除法只保留整數部分。
- 給定逆波蘭表達式總是有效的。換句話說,表達式總會得出有效數值且不存在除數為 0 的情況。
示例 1:
輸入: ["2", "1", "+", "3", "*"] 輸出: 9 解釋: ((2 + 1) * 3) = 9
示例 2:
輸入: ["4", "13", "5", "/", "+"] 輸出: 6 解釋: (4 + (13 / 5)) = 6
解題思路:
定義一個整數棧st,遍歷給定的字符串數組的每個元素;
若是數字轉為整數壓入棧st中;
若是運算符,從棧st取出兩個元素做運算,並將結果壓入棧st中。
則棧st的最後一個元素即是運算結果。
如
["2", "1", "+", "3", "*"]
"2", 入棧
"1",入棧
"+",取出2與1, 1+2=3, 3入棧
"3", 入棧
"*",取出3與3, 3*3=9, 9入棧
棧的最後一個元素即是結果。
實現代碼:
public static int evalRPN(String[] tokens) { Stack<Integer> st = new Stack<>();for (int i=0; i<tokens.length; i++) { switch(tokens[i]) { case "+": st.push(st.pop()+st.pop()); break; case "-": st.push(-st.pop()+st.pop()); break; case "*": st.push(st.pop()*st.pop()); break; case "/": int num = st.pop(); st.push(st.pop()/num); break; default: st.push(Integer.valueOf(tokens[i])); break; } } return st.pop(); }
補充:java中switch case 支持String數據類型。(其它還包括byte,short,char,int四種整形類型與枚舉)
逆波蘭表達式求值