LeetCode刷题,棒球比赛(682)

279 阅读1分钟

棒球比赛

比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 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; // 返回即可
};