棒球比赛
比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作
解题代码
思路:使用栈的方式来进行数据的获取和计算(可以直接利用数组下标进行获取,不用反复弹出,此方法只是为了加强栈的使用)
var calPoints = function(ops) {
this.stack = []; // 使用栈来记录
for (let i = 0; i < ops.length; i++) {
const op = ops[i];
if (op === "+") {
const score1 = this.stack.pop(); // 依次获取栈顶元素
const score2 = this.stack.pop();
this.stack.push(score2);
this.stack.push(score1); // 依次重新压入栈
this.stack.push(score1 + score2); // 压入和值
} else if (op === "D") {
const score = this.stack.pop(); // 获取栈顶元素
this.stack.push(score); // 压入
this.stack.push(score * 2); // 压入得分的2倍
} else if (op === "C") {
this.stack.pop(); // 弹出
} else {
this.stack.push(Number(op)); // 压入分数
}
}
let sum = 0;
while (this.stack.length) {
sum += this.stack.pop(); // 计算和
}
return sum; // 返回即可
};