From 260741e9741710300bf6a84c781ce524edce7fda Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Thu, 1 Apr 2021 10:35:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9B=E6=89=A3=EF=BC=9A682:=E6=A3=92?= =?UTF-8?q?=E7=90=83=E6=AF=94=E8=B5=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/leetcode/editor/cn/BaseballGame.java | 111 ++++++++++++++++++ .../java/leetcode/editor/cn/BaseballGame.md | 64 ++++++++++ 2 files changed, 175 insertions(+) create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.java create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.md diff --git a/LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.java b/LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.java new file mode 100644 index 0000000..47d19c4 --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.java @@ -0,0 +1,111 @@ +//你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。 +// +// 比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 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 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) + +} \ No newline at end of file diff --git a/LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.md b/LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.md new file mode 100644 index 0000000..8580ad4 --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/BaseballGame.md @@ -0,0 +1,64 @@ +

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。

+ +

比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:

+ +
    +
  1. 整数 x - 表示本回合新获得分数 x
  2. +
  3. "+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
  4. +
  5. "D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
  6. +
  7. "C" - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
  8. +
+ +

请你返回记录中所有得分的总和。

+ +

 

+ +

示例 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
+
+ +

 

+ +

提示:

+ + +
Related Topics
  • \n
  • 👍 169
  • 👎 0
  • \ No newline at end of file