大家好,我是毛毛。ヾ(´∀ ˋ)ノ
廢話不多說開始今天的解題Day~
You are keeping score for a baseball game with strange rules. The game consists of several rounds, where the scores of past rounds may affect future rounds' scores.
At the beginning of the game, you start with an empty record. You are given a list of strings ops
, where ops[i]
is the ith
operation you must apply to the record and is one of the following:
x
- Record a new score of x
."+"
- Record a new score that is the sum of the previous two scores. It is guaranteed there will always be two previous scores."D"
- Record a new score that is double the previous score. It is guaranteed there will always be a previous score."C"
- Invalidate the previous score, removing it from the record. It is guaranteed there will always be a previous score.Return the sum of all the scores on the record.
Input: ops = ["5","2","C","D","+"]
Output: 30
Explanation:
"5" - Add 5 to the record, record is now [5].
"2" - Add 2 to the record, record is now [5, 2].
"C" - Invalidate and remove the previous score, record is now [5].
"D" - Add 2 * 5 = 10 to the record, record is now [5, 10].
"+" - Add 5 + 10 = 15 to the record, record is now [5, 10, 15].
The total sum is 5 + 10 + 15 = 30.
Input: ops = ["5","-2","4","C","D","9","+","+"]
Output: 27
Explanation:
"5" - Add 5 to the record, record is now [5].
"-2" - Add -2 to the record, record is now [5, -2].
"4" - Add 4 to the record, record is now [5, -2, 4].
"C" - Invalidate and remove the previous score, record is now [5, -2].
"D" - Add 2 * -2 = -4 to the record, record is now [5, -2, -4].
"9" - Add 9 to the record, record is now [5, -2, -4, 9].
"+" - Add -4 + 9 = 5 to the record, record is now [5, -2, -4, 9, 5].
"+" - Add 9 + 5 = 14 to the record, record is now [5, -2, -4, 9, 5, 14].
The total sum is 5 + -2 + -4 + 9 + 5 + 14 = 27.
Input: ops = ["1"]
Output: 1
1 <= ops.length <= 1000
ops[i]
is "C"
, "D"
, "+"
, or a string representing an integer in the range [-3 * 10^4, 3 * 10^4]
."+"
, there will always be at least two previous scores on the record."C"
and "D"
, there will always be at least one previous score on the record.首先先簡單的翻譯一下題目
給一個字串陣列,裏頭含有數字跟指令,數字的話就直接記錄下來;"+"
的話,則是把前兩筆記錄下來的數字加總,再記錄成下一筆;"D"
的話,則是把前一筆記錄下來的數字乘上2,再記錄成下一筆;"C"
的話,則是把前一筆記錄下來的數字刪掉;"+"
、"D"
和"C"
執行的時候都會確保前面有足夠的數字可以做運算。最後,回傳記錄下來的陣列的數字總和。
作法大致上是這樣
isnumeric()
只能判斷0~9之間的String,所以多用了一個if來判斷有沒有-
號,有的話,把minus_flag
設成True
,進到記錄數字的判斷式一樣直接記錄下來。class Solution:
def calPoints(self, ops: List[str]) -> int:
record = []
record_index = 0
minus_flag = False
for index in range(len(ops)):
if ops[index][0] == "-":
minus_flag = True
if ops[index].isnumeric() or minus_flag:
record.append(int(ops[index]))
minus_flag = False
record_index += 1
elif ops[index] == "+":
record.append((int(record[record_index-2])+int(record[record_index-1])))
record_index += 1
elif ops[index] == "D":
record.append((int(record[record_index-1])*2))
record_index += 1
elif ops[index] == "C":
record.pop(-1)
record_index -= 1
return sum(record)
大家明天見