[LeetCode] 150逆ポーランドNotation_Mediumタグを評価:スタックを

算術式の値が評価  逆ポーランド記法を

有効な演算子は  +、  -、  *、  /各オペランドは整数または別の表現であってもよいです。

注意:

  • 二つの整数間の部門はゼロに向かって切り捨てる必要があります。
  • 与えられたRPN式は常に有効です。これは、式は常に結果を評価するだろうし、ゼロ操作によって任意の格差がないことを意味します。

例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 + 3 /((9)* -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 -32 // == -1そしてINT(1 / -32)== 0

T:O(N)S:O(N)

コード

クラスソリューション:
     DEF evalRPN(自己、トークン:リスト[STR]) - > INT:
         なら ないトークン:リターン0 
        スタック、D = []、{ ' + '' - '' * '' / ' }
         のためにトークントークン:
             もしトークンにおけるD:
                NUM2 = stack.pop()
                NUM1 = stack.pop()
                 もしトークン== ' + ' 
                    NUM = num1を+ num2の
                 elifのトークン== ' - ' 
                    NUM = num1を- num2の
                 elifのトークン== ' * ' 
                    NUM = num1を* num2の
                 
                    NUM = INT(NUM1 / NUM2)
                スタック。 (NUM)を追加し
            、他
                stack.appendを(int型(トークン))
        のリターンスタック[0]

 

おすすめ

転載: www.cnblogs.com/Johnsonxiong/p/11274580.html