Python 棒球遊戲
假設我們有一個棒球比賽積分記錄器。我們有一系列字串;每個字串可以是以下四種類型之一:
- 整數(一輪的得分)——表示我們這一輪獲得的分數。
- “+”(一輪的得分)——表示我們這一輪獲得的分數是最後兩輪有效分數的總和。
- “D”(一輪的得分)——表示我們這一輪獲得的分數是上一輪有效分數的兩倍。
- “C”(一個操作,不是一輪的得分)——表示我們上一輪獲得的有效分數無效,應該刪除。
請注意,每一輪的操作都是永久性的,並且可能對之前和之後的輪次產生影響。我們必須找到所有輪次中我們可以獲得的分數總和。
因此,如果輸入類似於 ["5","2","C","D","+"],則輸出將為 30。這是因為:
- 第一輪 - 我們獲得 5 分。總分:5。
- 第二輪 - 我們獲得 2 分。總分:7。
- 操作 1 - 第二輪的資料無效。總分:5。
- 第三輪 - 我們獲得 10 分。總分:15。
- 第四輪 - 我們獲得 5 + 10 = 15 分。總分:30。
為了解決這個問題,我們將遵循以下步驟:
- 堆疊 := 空列表
- 對於 ops 中的每個 i,執行:
- 如果 i 等於 “+”,則
- first := stack[stack 大小 - 1],second := stack[stack 大小 - 2]
- 將 (first + second) 插入堆疊的末尾
- 否則,如果 i 等於 “D”,則
- 將 (堆疊的最後一個元素 * 2) 插入堆疊的末尾
- 否則,如果 i 等於 “C”,則
- 從堆疊中刪除最後一個元素
- 否則,
- 將 i 插入堆疊的末尾
- 如果 i 等於 “+”,則
- 返回堆疊中所有元素的總和
讓我們看看下面的實現來更好地理解:
示例
class Solution: def calPoints(self, ops): stack = [] for i in ops: if i == "+": first, second = stack[len(stack) - 1], stack[len(stack) - 2] stack.append(first + second) elif i == "D": stack.append(stack[-1] * 2) elif i == "C": stack.pop() else: stack.append(int(i)) return sum(stack) ob = Solution() print(ob.calPoints(["5","2","C","D","+"]))
輸入
["5","2","C","D","+"]
輸出
30
廣告