12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package main
- import (
- "strconv"
- )
- func evalRPN(tokens []string) int {
- length := len(tokens)
- if length == 0 {
- return 0
- }
- vals := make([]int, 0)
- for i := 0; i < length; i++ {
- switch tokens[i] {
- case "+":
- size := len(vals)
- a, b := vals[size-2], vals[size-1]
- vals = vals[:size-2]
- vals = append(vals, a+b)
- case "-":
- size := len(vals)
- a, b := vals[size-2], vals[size-1]
- vals = vals[:size-2]
- vals = append(vals, a-b)
- case "*":
- size := len(vals)
- a, b := vals[size-2], vals[size-1]
- vals = vals[:size-2]
- vals = append(vals, a*b)
- case "/":
- size := len(vals)
- a, b := vals[size-2], vals[size-1]
- vals = vals[:size-2]
- vals = append(vals, a/b)
- default:
- val, _ := strconv.Atoi(tokens[i])
- vals = append(vals, val)
- }
- }
- return vals[0]
- }
- // func main() {
- // println(evalRPN([]string{ // The answer: 22
- // "10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"}))
- // }
|