2018-06-04 682. Baseball Game

题意:给你一个字符串序列,每个字符串代表不同的意思,最后算出得分。
解题思路:使用一个栈存放所有有效的得分,遇到表示无效得分的字符串,总分减去栈顶元素,把栈顶元素弹出。

class Solution {
public:
    int calPoints(vector<string>& ops) {
        int ans = 0;
        stack<int> scores;
        for(int i = 0; i < ops.size(); i++){
            if(ops[i] == "+"){
                int top1 = scores.top();
                scores.pop();
                int top2 = scores.top();
                scores.push(top1);
                ans = ans + top1 + top2;
                scores.push(top1 + top2);
            }else if(ops[i] == "D"){
                ans = ans + scores.top() * 2;
                scores.push(scores.top() * 2);
            }else if(ops[i] == "C"){
                ans -= scores.top();
                scores.pop();
            }else{
                int sc = atoi(ops[i].c_str());
                scores.push(sc);
                ans += sc;
            }
        }
        return ans;
    }
};

需要注意的是将string型字符串转换为int型函数的方法:
1、调用的是C语言中的atoi()函数。
需要包含头文件:#include <stdlib.h>
atoi() 函数(ASCII to int)用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);
2、在C++中调用atoi()函数,如果参数是个string,需要使用string.c_str()方法
需要包含头文件:#include<cstring>
c_str():生成一个const char*指针,指向以空字符终止的数组。
例如程序中的使用方式 int sc = atoi(ops[i].c_str());可以完成将string ops[i]转换为int型整数。

    原文作者:alexssssu
    原文地址: https://www.jianshu.com/p/8d8812d8f255
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞