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 插入堆疊的末尾
  • 返回堆疊中所有元素的總和

讓我們看看下面的實現來更好地理解:

示例

 線上演示

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

更新於:2020年7月4日

2K+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告