当前位置:网站首页>682. 棒球比赛

682. 棒球比赛

2022-06-11 08:55:00 拽拽就是我

leetcode力扣刷题打卡

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

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

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

解题思路

1、进进出出的操作那肯定是栈了;
2、+的时候,为了得到前两次的得分,需要先弹出前一次的得分,拿到前第二次的得分后,再把前一次的得分放回去;
3、stoi函数(字符串转整型)也太好用了;

原代码##

class Solution {
    
public:
    int calPoints(vector<string>& ops) {
    
        stack<int>s;
        int ans = 0;
        for (int i = 0; i < ops.size(); ++i) {
    
            char ch = ops[i][0];
            if (ch == 'C') {
     
                ans -= s.top();
                s.pop();
            } else if (ch == 'D') {
    
                int temp = s.top() * 2;
                s.push(temp);
                ans += s.top();
            } else if (ch == '+'){
    
                int pre1 = s.top();
                s.pop();
                int pre2 = s.top();
                s.push(pre1);
                int temp = pre1 + pre2;
                s.push(temp);
                ans += s.top();
            } else {
    
                int temp = stoi(ops[i]);
                s.push(temp);
                ans += temp;
            }
        }
        return ans;
    }
};
原网站

版权声明
本文为[拽拽就是我]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_32355021/article/details/125139972