LeetCode简单题之棒球比赛
題目
你現在是一場采用特殊賽制棒球比賽的記錄員。這場比賽由若干回合組成,過去幾回合的得分可能會影響以后幾回合的得分。
比賽開始時,記錄是空白的。你會得到一個記錄操作的字符串列表 ops,其中 ops[i] 是你需要記錄的第 i 項操作,ops 遵循下述規則:
整數 x - 表示本回合新獲得分數 x
“+” - 表示本回合新獲得的得分是前兩次得分的總和。題目數據保證記錄此操作時前面總是存在兩個有效的分數。
“D” - 表示本回合新獲得的得分是前一次得分的兩倍。題目數據保證記錄此操作時前面總是存在一個有效的分數。
“C” - 表示前一次得分無效,將其從記錄中移除。題目數據保證記錄此操作時前面總是存在一個有效的分數。
請你返回記錄中所有得分的總和。
示例 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
提示:
1 <= ops.length <= 1000
ops[i] 為 “C”、“D”、"+",或者一個表示整數的字符串。整數范圍是 [-3 * 10^4, 3 * 10^4]
對于 “+” 操作,題目數據保證記錄此操作時前面總是存在兩個有效的分數
對于 “C” 和 “D” 操作,題目數據保證記錄此操作時前面總是存在一個有效的分數
來源:力扣(LeetCode)
解題思路
??這是一個比較簡單的數組操作題,需要注意的是刪除操作帶來的影響。我們可以模擬改變數組來完成。
class Solution:def calPoints(self, ops: List[str]) -> int:i=0score=0def isnumber(x):try:return int(x)except:return Nonewhile i<len(ops):if isnumber(ops[i])!=None:score+=int(ops[i])else:if ops[i]=='D':ops[i]=int(ops[i-1])*2score+=ops[i]if ops[i]=='C':score-=int(ops[i-1])del ops[i-1]del ops[i-1]i-=1continueif ops[i]=='+':ops[i]=int(ops[i-1])+int(ops[i-2])score+=ops[i]i+=1return score
??當然也可以另外開辟一個數組單獨存儲分數,并以此來加快程序速度。
class Solution:def calPoints(self, ops: List[str]) -> int:i=0def isnumber(x):try:return int(x)except:return Nonetemp=[]for i in range(len(ops)):if isnumber(ops[i]):temp.append(int(ops[i]))elif ops[i]=='+':temp.append(temp[-1]+temp[-2])elif ops[i]=='D':temp.append(temp[-1]*2)else:temp.pop()return sum(temp)
總結
以上是生活随笔為你收集整理的LeetCode简单题之棒球比赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之数组形式的整数加
- 下一篇: LeetCode简单题之寻找数组的中心下