题目描述:

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:
整数 x - 表示本回合新获得分数 x
“+” - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
“D” - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
“C” - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
请你返回记录中所有得分的总和。

提示:
1 <= ops.length <= 1000
ops[i] 为 “C”、“D”、"+",或者一个表示整数的字符串。整数范围是 [-3 * 104, 3 * 104]
对于 “+” 操作,题目数据保证记录此操作时前面总是存在两个有效的分数
对于 “C” 和 “D” 操作,题目数据保证记录此操作时前面总是存在一个有效的分数

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

C++代码如下:

class Solution {public:int calPoints(vector<string>& ops) {stack<int>s;int n;int a,b,c;int sum=0;for(int i=0;i<ops.size();i++){if(ops[i]=="C"){s.pop();    }else if(ops[i]=="D"){s.push(s.top()*2);}else if(ops[i]=="+"){a=s.top();s.pop();b=s.top();s.pop();c=a+b;s.push(b);s.push(a);s.push(c);}else{s.push(stoi(ops[i]));//stoi()是将字符转化为数字}}while(!s.empty()){sum+=s.top();s.pop();}return sum;}
};

JAVA代码如下:

class Solution {public int calPoints(String[] ops) {Stack<Integer> s=new Stack<>();for(String op:ops){if(op.equals("+")){int a=s.pop();int b=s.peek();s.push(a);s.push(a+b);}else if(op.equals("D")){s.push(2*s.peek());}else if(op.equals("C")){    s.pop();}else{s.push(Integer.parseInt(op));}}int sum=0;for(int i=0;i<s.size();i++){sum+=s.get(i);}return sum;}
}

使用switch语句:

import java.util.Stack;public class Solution {public static void main(String[] args) {String[] ops = {"5", "2", "C", "D", "+"};System.out.println(calPoints(ops));}public static int calPoints(String[] ops) {Stack<Integer> s = new Stack<>();for (String op : ops) {switch (op) {case "+" -> {int a = s.pop();int b = s.peek();s.push(a);s.push(a + b);}case "D" -> s.push(2 * s.peek());case "C" -> s.pop();default -> s.push(Integer.parseInt(op));}}int sum = 0;for (Integer integer : s) {sum += integer;}return sum;}
}

执行结果:

LeetCode——682. 棒球比赛相关推荐

  1. [LeetCode]682. 棒球比赛(Baseball Game)Java

    一.题目: LeetCode地址 你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. "+&qu ...

  2. leetcode 682. 棒球比赛(Baseball Game)

    目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 整数(一轮的得分):直接表示您在本轮中获得的积分数. & ...

  3. LeetCode 682 棒球比赛

    你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. "+"(一轮的得分):表示本轮获得 ...

  4. Leetcode 682. 棒球比赛 解题思路及C++实现

    解题思路: 这道题比较简单,就是直接用一个stack,依次处理输入容器中的每一个字符串,要注意的是:将string转为int,C++中函数为stoi(): class Solution { publi ...

  5. LeetCode:棒球比赛【682】

    LeetCode:棒球比赛[682] 题目描述 你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. &qu ...

  6. vector 力扣 682 棒球比赛

    682 棒球比赛 你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. "+"(一轮的得 ...

  7. 《LeetCode刷题》682. 棒球比赛(java篇)

    题目描述: 你现在是一场采用特殊赛制棒球比赛的记录员.这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分. 比赛开始时,记录是空白的.你会得到一个记录操作的字符串列表 ops,其中 o ...

  8. [LeetCode javaScript] 682. 棒球比赛

    你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. "+"(一轮的得分):表示本轮获得 ...

  9. Leetcoode 682. 棒球比赛

    你现在是一场采用特殊赛制棒球比赛的记录员.这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分. 比赛开始时,记录是空白的.你会得到一个记录操作的字符串列表 ops,其中 ops[i] ...

最新文章

  1. Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
  2. log4j在eclipse上使用简介
  3. JSP+Servlet + JDBC 实现简单的登录验证模块
  4. UGUI 事件穿透规则
  5. ibatis多参数的问题
  6. 文件锁操作《精通Unix下C语言编程与项目实践》之三
  7. matlab怎让3d旋转,如何在MATLAB中平滑旋转3D绘图?
  8. python中方法调用方法_Python中实现结构相似的函数调用方法
  9. 矩池云上matplotlib显示中文乱码
  10. Mutt email 程序使用入门 作者:王垠
  11. MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?...
  12. PCWorld评出的2010年世界杀毒软件排名
  13. QuickEdit-手机端强大的代码编辑器
  14. 直播行业市场分析:2022年构建多元化的直播生态体系
  15. 阿里云ECS云服务器Linux Tomcat启动慢 访问网页转圈
  16. ROS中usb摄像头的使用_(usb_cam)
  17. memcpy和memset使用时需要区分的注意点
  18. 学python能赚钱吗-利用python能怎么挣钱
  19. Vulnhub靶机:VEGETA_ 1
  20. 淘宝API 商品优惠券

热门文章

  1. 微信多开+防撤回小程序编写(e语言)
  2. %.2f 和 %1.2f的区别
  3. 若依ruoyi实现单点登录
  4. AutoGluon 低调开源!性能超过人类调参师6个点
  5. 微信小程序开发入门指南二
  6. Flutter FutureBuilder 异步UI神器
  7. Docker: 容器与镜像
  8. 给你一个智能音响,你怎么测?
  9. 大广告位展示-淘淘商城
  10. Zookeeper超级用户