You are keeping the scores for a baseball game with strange rules. At the beginning of the game, you start with an empty record.
You are given a list of strings
-
An integer
x .-
Record a new score of
x .
-
Record a new score of
-
'+' - Record a new score that is the sum of the previous two scores.
-
'D' - Record a new score that is the double of the previous score.
-
'C' - Invalidate the previous score, removing it from the record.
Return the sum of all the scores on the record after applying all the operations.
The test cases are generated such that the answer and all intermediate calculations fit in a 32-bit integer and that all operations are valid.
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.
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.
Output: 0
Explanation:
"1" - Add 1 to the record, record is now [1].
"C" - Invalidate and remove the previous score, record is now [].
Since the record is empty, the total sum is 0.
Constraints:
1 <= operations.length <= 1000 operations[i] is"C" ,"D" ,"+" , or a string representing an integer in the range[-3 * 104, 3 * 104] .- For operation
"+" , there will always be at least two previous scores on the record. - For operations
"C" and"D" , there will always be at least one previous score on the record.
Contents
Solution 1 - Using stack
In this approach, we are going to use a
Implementation steps:
-
First, we will create a variable
stack asStack<Integer> that we will use to baseball game scores. -
Next, loop through input string array
operations and for each operation do the following:-
If the operation is
'+' : look at top two elements, compute the sum of these two elements and add it back to thestack . -
If the operation is
'D' : look at top element, double it's value and add it back to thestack . -
If the operation is
'C' : remove the top element fromstack . -
If the operation is a number: add it to the
stack .
-
If the operation is
-
Now, loop through elements of the
stack and return its sum.
Complexity Analysis:
Time complexity: Above code runs in O(n) time where
Space complexity: O(n), since we are storing operation elements into a
Above implementations source code can be found at