前往
大廳
主題

LeetCode - 682. Baseball Game 解題心得

Not In My Back Yard | 2020-12-20 00:00:04 | 巴幣 0 | 人氣 91

題目連結:


題目意譯:
你正在記錄一個有著特別規則的籃球比賽之分數。比賽有好幾回合,其中過去回合的分數可能會影響將來的回合之分數。

在比賽一開始時,你有著一塊空白的記錄板。你被給定一個字串列表 ops,其中 ops[i] 代表著你需要套用到記錄板上的第 i 個操作,且為下列的其中一者:

一個整數 x - 記錄一個新分數為 x 。
"+" - 記錄一個新分數,該分數值為前兩個分數值之和。保證一定會有前兩個分數值。
"D" - 記錄一個新分數,該分數值為前一個分數值的兩倍。保證一定會有前一個分數值。
"C" - 消去前一個分數(也就是最新的那個),從記錄板上移除掉。保證會有前一個分數。

回傳記錄板上所有分數之和。

限制:
1 <= ops.length <= 1000
ops[i] 是 "C" 、 "D" 、 "+" ,或是一個由字串表示的整數,該值介於 [-3 × 10 ^ 4, 3 × 10 ^ 4].
對於操作 "+",保證記錄板上一定會有前兩個分數值。
對於操作 "C" 和 "D",保證記錄板一定會有前一個分數值。



範例測資:
範例 1:
輸入: ops = ["5","2","C","D","+"]
輸出: 30
解釋:
"5" - 加一個 5 到記錄裡,記錄現在是 [5]。
"2" - 加一個 2 到記錄裡,記錄現在是 [5, 2]。
"C" - 消掉前一個分數,記錄現在是 [5]。
"D" - 加一個 2 × 5 = 10 到記錄裡,記錄現在是 [5, 10]。
"+" - 加一個 5 + 10 = 15 到記錄裡,記錄現在是 [5, 10, 15]。
總和是 5 + 10 + 15 = 30。

範例 2:
輸入: ops = ["5","-2","4","C","D","9","+","+"]
輸出: 27
解釋:
"5" - 加一個 5 到記錄裡,記錄現在是 [5]。
"-2" - 加一個 -2 到記錄裡,記錄現在是 [5, -2]。
"4" - 加一個 4 到記錄裡,記錄現在是 [5, -2, 4]。
"C" - 消掉前一個分數,記錄現在是 [5, -2]。
"D" - 加一個 2 × -2 = -4 到記錄裡, [5, -2, -4]。
"9" - 加一個 9 到記錄裡,記錄現在是 [5, -2, -4, 9]。
"+" - 加一個 -4 + 9 = 5 到記錄裡,記錄現在是 [5, -2, -4, 9, 5]。
"+" - 加一個 9 + 5 = 14 到記錄裡,記錄現在是 [5, -2, -4, 9, 5, 14]。
總和是 5 + -2 + -4 + 9 + 5 + 14 = 27。

範例 3:
輸入: ops = ["1"]
輸出: 1


解題思維:
就是單純地使用整數陣列模擬即可。

對於每個整數字串 "x" 將其轉成整數型態然後放到陣列的最尾端、每個 "+" 就取最尾端的兩個分數加起來再放到陣列的尾端、每個 "D" 就取最尾端的分數乘以 2 之後的值放到陣列尾端,最後是對於每個 "C" 就單純地將陣列的最尾端的元素移除掉即可。

最後掃過一次陣列的內容,然後將每個數字加起來即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作