根據逆波蘭表示法,求表示式的值。有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。
說明:整數除法只保留整數部分。
給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 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
乙個表示式e的字尾形式可以如下定義:解題思路(1)如果e是乙個變數或常量,則e的字尾式是e本身。
(2)如果e是e1 op e2形式的表示式,這裡op是任何二元操作符,則e的字尾式為e1'e2' op,這裡e1'和e2'分別為e1和e2的字尾式。
(3)如果e是(e1)形式的表示式,則e1的字尾式就是e的字尾式。
如:我們平時寫a+b,這是中綴表示式,寫成字尾表示式就是:ab+
(a+b)*c-(a+b)/e的字尾表示式為:
(a+b)*c-(a+b)/e
→((a+b)*c)((a+b)/e)-
→((a+b)c*)((a+b)e/)-
→(ab+c*)(ab+e/)-
→ab+c*ab+e/-
下面以(a+b)*c為例子進行說明:(a+b)c的逆波蘭式為ab+c,假設計算機把ab+c按從左到右的順序壓入棧中,並且按照遇到運算子就把棧頂兩個元素出棧,執行運算,得到的結果再入棧的原則來進行處理,那麼ab+c的執行結果如下:
1)a入棧(0位置)
2)b入棧(1位置)
3)遇到運算子「+」,將a和b出棧,執行a+b的操作,得到結果d=a+b,再將d入棧(0位置)
4)c入棧(1位置)
5)遇到運算子「」,將d和c出棧,執行dc的操作,得到結果e,再將e入棧(0位置)
經過以上運算,計算機就可以得到(a+b)*c的運算結果e了。
class solution
else if (cur == "-")
else if (cur == "*")
else
}else
}return s.top();
}};
150 逆波蘭表示式求值
根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 示例 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 解釋 ...
150 逆波蘭表示式求值
題目描述 根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 整數除法只保留整數部分。給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。示例 1 輸入 2 1 3 輸出 9 解釋 2 1 3 9 示例 2 ...
150 逆波蘭表示式求值
第一次嘗試 根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 整數除法只保留整數部分 給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。leetcode鏈結 判斷是數字還是符號 bool func cha...