算術式の値が評価 逆ポーランド記法を。
有効な演算子は +
、 -
、 *
、 /
。各オペランドは整数または別の表現であってもよいです。
注意:
- 二つの整数間の部門はゼロに向かって切り捨てる必要があります。
- 与えられた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]