682. Baseball Game

来源:互联网 发布:桌面 知乎 编辑:程序博客网 时间:2024/04/30 02:52

题目的要求是,按照给定的字符串,计算出每个回合得到的分数,同时计算出总分,最后返回总分。计算分数的规则如下:

数字:当前回合的直接得分

C:上一回合的得分取消

D:本回合得到的分数为上一次得到的分数的两倍

+:本回合的得分为前两次得到的分数之和

解决问题的思路是:遍历给定的字符串,判断每次回合得到的分数。利用vector去存储每一回合得到的分数:

数字:入栈

C:取消上一回合得到的分数,即vector中弹出最近添加的数字,出栈

D:新入栈的元素为上一元素的两倍

+:新入栈的元素为之前两个元素之和


其中,字符串转int的函数如下:

    int getNum(string& s) {        int num;        stringstream ss;        ss << s;        ss >> num;        return num;    }

完整的代码如下:

class Solution {public:    int getNum(string& s) {        int num;        stringstream ss;        ss << s;        ss >> num;        return num;    }    int calPoints(vector<string>& ops) {        int sum = 0;        vector<int> round;        for (int i = 0; i < ops.size(); i++) {            if (ops[i] == "C") {                sum -= round.back();                round.pop_back();            } else if (ops[i] == "D") {                int temp = 2 * round.back();                round.push_back(temp);                sum += temp;            } else if (ops[i] == "+") {                int index = round.size() - 1;                int temp = round[index] + round[index-1];                round.push_back(temp);                sum += temp;            } else {                int temp = getNum(ops[i]);                sum += temp;                round.push_back(temp);            }        }        return sum;    }};


原创粉丝点击