leet-code/src/main/java/leetcode/editor/cn/BaseballGame.java
2021-04-29 23:21:52 +08:00

111 lines
3.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
//
// 比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 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 * 104, 3 * 104]
// 对于 "+" 操作,题目数据保证记录此操作时前面总是存在两个有效的分数
// 对于 "C" 和 "D" 操作,题目数据保证记录此操作时前面总是存在一个有效的分数
//
// Related Topics 栈
// 👍 169 👎 0
package leetcode.editor.cn;
import java.util.Stack;
//682:棒球比赛
public class BaseballGame {
public static void main(String[] args) {
//测试代码
Solution solution = new BaseballGame().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int calPoints(String[] ops) {
int sum = 0;
Stack<Integer> stack = new Stack<>();
for (String str : ops) {
switch (str) {
case "C":
stack.pop();
break;
case "D":
stack.push(stack.peek() * 2);
break;
case "+":
int temp = stack.pop();
int current = temp + stack.peek();
stack.push(temp);
stack.push(current);
break;
default:
stack.push(Integer.valueOf(str));
break;
}
}
while (!stack.isEmpty()) {
sum += stack.pop();
}
return sum;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}