150 逆波蘭表示式求值

2021-10-22 17:35:17 字數 1653 閱讀 1876

逆波蘭表示式求值

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

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

說明:整數除法只保留整數部分。

給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。

示例 1:

輸入:tokens = [「2」,「1」,"+",「3」,"*"]

輸出:9

解釋:該算式轉化為常見的中綴算術表示式為:((2 + 1) * 3) = 9

示例 2:

輸入:tokens = [「4」,「13」,「5」,"/","+"]

輸出:6

解釋:該算式轉化為常見的中綴算術表示式為:(4 + (13 / 5)) = 6

示例 3:

輸入:tokens = [「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

題解:此題可用棧來計算:

注意:python的 b / a 會向下取整, 比如 -1 / 132 = -1。 題目要求是取整數部分,那麼負數的時候,實際應該是向上取整, 解決方法: int(b / float(a))

python3 b / a 會轉為小數計算,所以直接 int(b / a), 不能 b // a

按照運算子優先順序的思路去想,numstack[-2] + numstack.pop()會先被計算然後放進numstack[-1],訪問記憶體 numstack[-2] 時最後乙個數未被pop出,所以取出到數第二個,訪問numstack[-1]時最後乙個數已被pop出,取最後乙個。

class

solution

:def

evalrpn

(self, tokens: list[

str])-

>

int:

stack=

for token in tokens:

if token ==

"+": stack[-1

]= stack[-2

]+ stack.pop(

)elif token ==

"-": stack[-1

]= stack[-2

]- stack.pop(

)elif token ==

"*": stack[-1

]=int(stack[-2

])*int

(stack.pop())

elif token ==

"/": stack[-1

]=int(stack[-2

]/ stack.pop())

else

int(token)

)return stack[

0]

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 的情況。示例 1 輸入 2 1 3 輸出 9 解釋 2 1 3 9 示例 2 輸入 4 ...