-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBaseballGame.java
More file actions
118 lines (109 loc) · 3.87 KB
/
BaseballGame.java
File metadata and controls
118 lines (109 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.leetcode.editor.cn;
//你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
//
// 比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 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⁴, 3 * 10⁴]
// 对于 "+" 操作,题目数据保证记录此操作时前面总是存在两个有效的分数
// 对于 "C" 和 "D" 操作,题目数据保证记录此操作时前面总是存在一个有效的分数
//
// Related Topics 栈 数组 模拟 👍 222 👎 0
/**
* 682 棒球比赛
* @date 2022-03-26 12:07:50
* @author shang.liang
*/
public class BaseballGame{
public static void main(String[] args){
Solution soution = new BaseballGame().new Solution();
String[] ops = new String[]{"5","-2","4","C","D","9","+","+"};
System.out.println("soution.calPoints(ops) = " + soution.calPoints(ops));
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int calPoints(String[] ops) {
int res = 0;
int[] score = new int[ops.length];
for (int i = 0,index=0; i < ops.length; i++, index++) {
switch (ops[i]) {
case "+": {
score[index] = score[index - 1] + score[index - 2];
res += score[index];
break;
}
case "D":{
score[index] = score[index - 1] * 2;
res += score[index];
break;
}
case "C": {
res -= score[index - 1];
index -= 2;
break;
}
default: {
score[index] = Integer.parseInt(ops[i]);
res += score[index];
}
}
}
return res;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}