首页 > 其他分享 >力扣 682. 棒球比赛

力扣 682. 棒球比赛

时间:2024-07-12 18:30:04浏览次数:19  
标签:operations int ans back len 力扣 棒球 size 682

题目内容

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

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

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

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

初始思路

遍历字符串列表ops

  1. 整数x 直接加入分数列表ans
  2. “+” scores列表最后两个数的和置入列表
  3. “D” scores列表最后一个数的两倍置入ans
  4. 移除scores列表的最后一个数

考虑用vector<int>实现ans列表 

class Solution {
public:
    int calPoints(vector<string>& operations) {
        int n = operations.size();
        vector<int> ans;
        int len = ans.size();
        for(int i = 0; i < n; i++)
        {
            len = ans.size();
            if(operations[i] == '+')
            {
                ans.push_back(ans[len - 1] + ans[len - 2]);
            }
            else if(operations[i] == 'C')
            {
                ans.pop_back();
            }
            else if(operations[i] == 'D')
            {
                ans.push_back(2 * ans[len - 1]);
            }
            else
            {
                ans.push_back((int)operations[i]);
            }
        }
        int sum = 0;
        len = ans.size();
        for(int i = 0; i < len; i++)
        {
            sum += ans[i];
        }
        return sum;
    }
};

出现问题

 ops是字符串列表,operations[i] == '+'表达式错误

(int)operations[i]实际上并不能将operations[i]转换为整数

解决办法

由于除整数外字符串长度都为1,所以直接将operations[i][0]比较

采用stoi函数

class Solution {
public:
    int calPoints(vector<string>& operations) {
        int n = operations.size();
        vector<int> ans;
        int len = ans.size();
        for(int i = 0; i < n; i++)
        {
            len = ans.size();
            if(operations[i][0] == '+')
            {
                ans.push_back(ans[len - 1] + ans[len - 2]);
            }
            else if(operations[i][0] == 'C')
            {
                ans.pop_back();
            }
            else if(operations[i][0] == 'D')
            {
                ans.push_back(2 * ans[len - 1]);
            }
            else
            {
                ans.push_back(stoi(operations[i]));
            }
        }
        int sum = 0;
        len = ans.size();
        for(int i = 0; i < len; i++)
        {
            sum += ans[i];
        }
        return sum;
    }
};

标签:operations,int,ans,back,len,力扣,棒球,size,682
From: https://blog.csdn.net/weixin_75069317/article/details/140385335

相关文章

  • 数据结构(Java):队列&集合Queue&力扣面试OJ题
    1、队列1.1队列的概念队列是一个特殊的线性表,只允许在一端(队尾)进行插入数据操作,在另一端(对头)进行删除数据。队列具有先进先出FIFO(FirstInFirstOut)的特性。入队:数据只能从队尾进队列    出队:数据只能从对头出队列即:队尾进队头出我们可以把队列想象为一个排队......
  • 算法力扣刷题记录 四十三【最大、最小深度问题】
    前言本文学习树的深度问题:二叉树(N叉树)最大深度、最小深度;记录三十九【层序遍历模版应用二】中解决过二叉树的最大深度和最小深度题目。思路是按层遍历:最大深度,相当于层序遍历结束;最小深度,相当于层序遍历过程中判断节点是不是叶子节点。那么此处的深度,还有什么知识点?......
  • 精选力扣,牛客链表面试题
    ......
  • 关于力扣150题目——逆波兰表达式求值Java实现的三种解法
    题目介绍逆波兰表达式是一种后缀表达式,其运算符位于操作数之后。力扣150题目要求我们实现一个函数,计算给定逆波兰表达式的值。本文将介绍三种不同的Java实现方法来解决这个问题。解法一:使用栈这是最直观和常见的解法,使用栈来存储操作数,并在遇到运算符时从栈中弹出操作数......
  • 力扣常用c++操作
    数字转字符串to_string()自定义sort函数sort(intervals.begin(),intervals.end(),[](vector<int>&v1,vector<int>&v2){returnv1[0]<v2[0];});自定义二分查找autoinsertit=lower_bound(intervals.begin(),intervals.end(),newInterval[0],......
  • 算法力扣刷题 三十五【二叉树基础和递归遍历】
    前言进入二叉树学习。继续。一、二叉树基础理论理论篇——参考链接以下是大纲:二、遍历方式学习递归法实现前、中、后遍历方法。“输入”阶段此处用了第一次递归法实现根据题目的双指针操作,传递递归的参数。解释递归(1)递归:自己调用自己。重复执行一段代码,但是......
  • 力扣—盛水最大的容器—双指针
    文章目录题目解析解题思路代码实现题目解析解题思路利用单调性控制其中一个变量,使用双指针控制另一个变量。我们知道S1(面积)=h(高度)*w(宽度)。由于高度的大小是随机的不可控,所以我们可以尝试控制宽度,定义变量left和right分别指向数组第一个元素和最后一个元素......
  • 力扣第7题:整数反转 字符串函数综合运用(C++)
    给你一个32位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1] ,就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321示例3:......
  • 力扣第22题:括号生成 深度优先搜索(DFS)和它的优化(C++)
    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]思路递出去,再归回来,是为递归。DFS算法是利用递归思想的一种搜索算法。想象一个矿井,从地面到井底有多层......
  • 力扣第6题:Z字形变换 交替V和Λ规律法(C++)
    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:PAHNAPLSIIGYIR之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。......