模擬: 逆序波蘭表達式的計算 Evaluate Reverse Polish Notation_Leetcode 150

更新於 發佈於 閱讀時間約 6 分鐘

題目敘述

題目會給我們一個輸入陣列tokens,裡面以逆序波蘭表達式的方式儲存各個token,請問最後計算完的值是多少?

例如: ["6", "2", "/"]

代表 6 / 2 =3


題目的原文敘述


測試範例

Example 1:

Input: tokens = ["2","1","+","3","*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9

Example 2:

Input: tokens = ["4","13","5","/","+"]
Output: 6
Explanation: (4 + (13 / 5)) = 6

Example 3:

Input: tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
Output: 22
Explanation: ((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

約束條件

Constraints:

  • 1 <= tokens.length <= 10^4

輸入陣列的長度1 ~ 一萬之間。

  • tokens[i] is either an operator: "+""-""*", or "/", or an integer in the range [-200, 200].

每個token一定是四則運算符號,或者介於-200~200之間的整數。


演算法 用stack進行模擬

這題應該滿多讀者在以前的資料結構或者演算法上課的時候看過類似的題目,給一串波蘭表達式,對這個波蘭表達式計算求值。

這題也是,而且已經講明了是逆序表達式,也就是說,所有的計算順序可以抽象的表達成:

日常生活中的 a 運算子 b <=> 以 a, b, 運算子 的逆序波蘭表達式出現
其中,運算子可以是 加+, 減-, 乘*, 除/
題目還規定,做除法的時候一率Truncate to zero,捨去小數點部分

模擬的時候,先建立一個空的stack,依序掃描每個token。

假如遇到數字,就把這個數字轉型為int,推入到stack的頂端儲存起來。

假如遇到四則運算子,就pop出來最頂端的兩個運算元,用對應的運算子去計算,再把計算完的值推入stack的頂端。


程式碼 用stack進行模擬

class Solution(object):
def evalRPN(self, tokens):

# Use stack to store operands
stack = []

operator = set("+-*/")

for token in tokens:

if token not in operator:
# Casting from string to integer
stack.append( int(token) )
continue

# Get first operand and second operand
second, first= stack.pop(), stack.pop()

if token == "+":
result = first + second
elif token == "-":
result = first - second
elif token == "*":
result = first * second
else:
# Truncates toward zero, defined in description
result = int(first / second)

stack.append(result)
# ========================================
return stack.pop()

複雜度分析 用stack進行模擬

時間複雜度:

從左到右檢查每個token,每個token最多push, pop各一次,所需時間為O(n)。

空間複雜度:

需要一個stack去儲存每個operand,所需空間最長為O(n)。


關鍵知識點

日常生活中的 a 運算子 b <=> 以 a, b, 運算子 的逆序波蘭表達式出現
其中,運算子可以是 加+, 減-, 乘*, 除/
題目還規定,做除法的時候一率Truncate to zero,捨去小數點部分

模擬的時候,先建立一個空的stack,依序掃描每個token。

假如遇到數字,就把這個數字轉型為int,推入到stack的頂端儲存起來。

假如遇到四則運算子,就pop出來最頂端的兩個運算元,用對應的運算子去計算,再把計算完的值推入stack的頂端。


留言
avatar-img
留言分享你的想法!
avatar-img
小松鼠的演算法樂園
96會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
看更多
你可能也想看
Thumbnail
貝瑟妮的婚禮來了許多親友,其中也包括大學剛畢業不久的表妹菲洛美娜。 菲洛美娜給予表姊誠心的祝賀。同時,婚禮的浪漫氣氛讓感性的她,不由得聯想翩翩。看到表姊穿著純白的婚紗,一臉幸福的模樣,就讓菲洛美娜非常羨慕。 她也好想穿上美麗的禮服,嫁給心愛的男人…… 不過,以目前的狀況來說,她要走
Thumbnail
貝瑟妮的婚禮來了許多親友,其中也包括大學剛畢業不久的表妹菲洛美娜。 菲洛美娜給予表姊誠心的祝賀。同時,婚禮的浪漫氣氛讓感性的她,不由得聯想翩翩。看到表姊穿著純白的婚紗,一臉幸福的模樣,就讓菲洛美娜非常羨慕。 她也好想穿上美麗的禮服,嫁給心愛的男人…… 不過,以目前的狀況來說,她要走
Thumbnail
IC設計股是屬於高毛利率族群,成本低利潤高,雖然股價波動大,但是超額報酬也同樣驚人,有興趣的人可以考慮加入持股組合。
Thumbnail
IC設計股是屬於高毛利率族群,成本低利潤高,雖然股價波動大,但是超額報酬也同樣驚人,有興趣的人可以考慮加入持股組合。
Thumbnail
清晨,勞倫斯早早地清醒過來,他向來不用太多睡眠就可保持充沛體力,所以早起對他不是難事。至於貝瑟妮,因為不適應新床,過很久才順利入睡,現在當然起不來。 勞倫斯安靜地到樓下的廚房,開始做起早餐,打算給未婚妻一個美好的新家早晨。新家非常地新,連窗簾都還沒裝好,還有許多等著他們要做的工作呢。
Thumbnail
清晨,勞倫斯早早地清醒過來,他向來不用太多睡眠就可保持充沛體力,所以早起對他不是難事。至於貝瑟妮,因為不適應新床,過很久才順利入睡,現在當然起不來。 勞倫斯安靜地到樓下的廚房,開始做起早餐,打算給未婚妻一個美好的新家早晨。新家非常地新,連窗簾都還沒裝好,還有許多等著他們要做的工作呢。
Thumbnail
晶片測試封裝大廠,也是晶片製造鏈的最後一道關卡!!
Thumbnail
晶片測試封裝大廠,也是晶片製造鏈的最後一道關卡!!
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
中學數學基礎練習—二元一次方程式
Thumbnail
中學數學基礎練習—二元一次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News