package main
import (
"strconv"
)
/*
* @lc app=leetcode.cn id=682 lang=golang
*
* [682] 棒球比赛
*/
// @lc code=start
func sum(numbers []int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
func calPoints(operations []string) int {
ret := make([]int, 0, len(operations))
for _, op := range operations {
switch op {
case "+":
ret = append(ret, ret[len(ret)-1] + ret[len(ret)-2])
case "C":
ret = ret[:len(ret)-1]
case "D":
ret = append(ret, 2*ret[len(ret)-1])
default:
num, _ := strconv.Atoi(op)
ret = append(ret, num)
}
}
return sum(ret)
}
// @lc code=end
这个题目的思路是用一个栈来存储每一轮的得分,然后遇到C的时候,就把栈顶的元素弹出,遇到D的时候,就把栈顶的元素翻倍,遇到+的时候,就把栈顶的两个元素相加,最后把栈里面的元素全部相加就是最后的得分了。