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
广告