09 Sept 2026Go / Python / TypeScriptEasy

Baseball Game

Evaluate a sequence of baseball scoring operations and return the total score.

Use a stack of valid round scores so cancel, double, and sum operations can access the required recent values directly.

complexity

O(n) time and O(n) space.

solution files

  • Go baseball-game/solution.go
  • Python baseball-game/solution.py
  • TypeScript baseball-game/solution.ts

Solution files

Gobaseball-game/solution.go
package main

import "strconv"

func calPoints(operations []string) int {
	scores := []int{}
	for _, operation := range operations {
		switch operation {
		case "+":
			scores = append(scores, scores[len(scores)-1]+scores[len(scores)-2])
		case "D":
			scores = append(scores, scores[len(scores)-1]*2)
		case "C":
			scores = scores[:len(scores)-1]
		default:
			score, _ := strconv.Atoi(operation)
			scores = append(scores, score)
		}
	}
	total := 0
	for _, score := range scores {
		total += score
	}
	return total
}
Pythonbaseball-game/solution.py
class Solution:
    def calPoints(self, operations: list[str]) -> int:
        scores: list[int] = []
        for operation in operations:
            if operation == class="syntax-string">"+": scores.append(scores[-class="syntax-number">1] + scores[-class="syntax-number">2])
            elif operation == class="syntax-string">"D": scores.append(scores[-class="syntax-number">1] * class="syntax-number">2)
            elif operation == class="syntax-string">"C": scores.pop()
            else: scores.append(int(operation))
        return sum(scores)
TypeScriptbaseball-game/solution.ts
function calPoints(operations: string[]): number {
  const scores: number[] = [];
  for (const operation of operations) {
    if (operation === class="syntax-string">"+") scores.push(scores.at(-class="syntax-number">1)! + scores.at(-class="syntax-number">2)!);
    else if (operation === class="syntax-string">"D") scores.push(scores.at(-class="syntax-number">1)! * class="syntax-number">2);
    else if (operation === class="syntax-string">"C") scores.pop();
    else scores.push(Number(operation));
  }
  return scores.reduce((sum, score) => sum + score, class="syntax-number">0);
}