题目的要求是,按照给定的字符串,计算出每个回合得到的分数,同时计算出总分,最后返回总分。计算分数的规则如下:
数字:当前回合的直接得分
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;
}
};