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