682. 棒球比赛
https://leetcode-cn.com/problems/baseball-game/
解法一:c++栈
相当naive,每轮得分存在栈中,便于题中’C‘(撤销)’D‘(加倍)和’+‘(前两轮)操作
class Solution {
public:
int calPoints(vector<string>& ops) {
stack<int> s;
int sum = 0;
for (int i = 0; i < ops.size(); i++) {//遍历ops,对每种情况处理
if (ops[i] == "C") {
s.pop();
}
else if (ops[i] == "D") {
int tmp = s.top() * 2;
s.push(tmp);
}
else if (ops[i] == "+") {
int tmp1 = s.top();
s.pop();
int tmp2 = s.top() + tmp1;
s.push(tmp1);
s.push(tmp2);
}
else { // 若是数字
int tmp = stoi(ops[i]);
s.push(tmp);
}
}
while(!s.empty()) { //求和
sum += s.top();
s.pop();
}
return sum;
}
};解法二:py栈
用一个list充当栈,好处是没有c++的栈那么死板,可以随意访问,只要保持栈的特性就好。写出来才发现和官方题解一模一样,巧了。
最后更新于