150 逆波蘭表示式求值

2021-09-12 07:55:02 字數 1450 閱讀 4418

題目描述:

根據逆波蘭表示法,求表示式的值。

有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。

說明:

整數除法只保留整數部分。

給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 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

解題思路:什麼是逆波蘭表示式呢?逆波蘭表示式又叫做字尾表示式,每乙個運算子都置於其運算物件之後,所以稱為字尾表示。

它的優勢在於只用兩種簡單操作,入棧和出棧就可以搞定任何普通表示式的運算。其運算方式如下:

如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後,棧裡的就是結果。

這裡注意,當遇見操作符,出棧數字時,第乙個棧頂元素為右運算元,再次出棧為左運算元,顛倒後結果錯誤。

**實現:

public int evalrpn(string tokens) else if(token.equals("-")) else if (token.equals("*")) else if (token.equals("/")) else 

}return stack.pop();

}

執行結果:

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 輸入 4 ...

150 逆波蘭表示式求值

第一次嘗試 根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 整數除法只保留整數部分 給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。leetcode鏈結 判斷是數字還是符號 bool func cha...