150.go 944 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package main
  2. import (
  3. "strconv"
  4. )
  5. func evalRPN(tokens []string) int {
  6. length := len(tokens)
  7. if length == 0 {
  8. return 0
  9. }
  10. vals := make([]int, 0)
  11. for i := 0; i < length; i++ {
  12. switch tokens[i] {
  13. case "+":
  14. size := len(vals)
  15. a, b := vals[size-2], vals[size-1]
  16. vals = vals[:size-2]
  17. vals = append(vals, a+b)
  18. case "-":
  19. size := len(vals)
  20. a, b := vals[size-2], vals[size-1]
  21. vals = vals[:size-2]
  22. vals = append(vals, a-b)
  23. case "*":
  24. size := len(vals)
  25. a, b := vals[size-2], vals[size-1]
  26. vals = vals[:size-2]
  27. vals = append(vals, a*b)
  28. case "/":
  29. size := len(vals)
  30. a, b := vals[size-2], vals[size-1]
  31. vals = vals[:size-2]
  32. vals = append(vals, a/b)
  33. default:
  34. val, _ := strconv.Atoi(tokens[i])
  35. vals = append(vals, val)
  36. }
  37. }
  38. return vals[0]
  39. }
  40. // func main() {
  41. // println(evalRPN([]string{ // The answer: 22
  42. // "10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"}))
  43. // }