LeetCode 逆波蘭表示式求值 python3

2021-10-24 15:52:56 字數 1936 閱讀 2612

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

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

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

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

逆波蘭表示式:

逆波蘭表示式是一種字尾表示式,所謂字尾就是指算符寫在後面。

平常使用的算式則是一種中綴表示式,如 ( 1 + 2 ) * ( 3 + 4 ) 。

該算式的逆波蘭表示式寫法為 ( ( 1 2 + ) ( 3 4 + ) * ) 。

逆波蘭表示式主要有以下兩個優點:

去掉括號後表示式無歧義,上式即便寫成 1 2 + 3 4 + * 也可以依據次序計算出正確結果。

適合用棧操作運算:遇到數字則入棧;遇到算符則取出棧頂兩個數字進行計算,並將結果壓入棧中。

class

solution

:def

evalrpn

(self, tokens: list[

str])-

>

int:

stack =

for i in tokens:

if i ==

'+':

x = stack.pop(

) stack[-1

]+= x

elif i ==

'-':

x = stack.pop(

) stack[-1

]-= x

elif i ==

'/':

x = stack.pop(

) stack[-1

]=int(stack[-1

]/ x)

elif i ==

'*':

x = stack.pop(

) stack[-1

]*= x

else

:int

(i))

return stack[

0]

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...

Leetcode 逆波蘭表示式求值

解題思路 c 通過乙個棧實現,整體用乙個while迴圈遍歷整個字串,當遇到不能把字元轉換成整型時進行判斷,同時將棧頂兩個元素出棧進行相關運算,運算結果放入棧中繼續進行遍歷。要點 不同資料型別之間的轉換,如果轉換成功則返回true,否則返回false。int.tryparse string s,out...