29 lines
555 B
Go
29 lines
555 B
Go
package q150
|
|
|
|
import "strconv"
|
|
|
|
func evalRPN(tokens []string) int {
|
|
stack := make([]int, 0, len(tokens)/2)
|
|
for _, s := range tokens {
|
|
height := len(stack)
|
|
|
|
switch s {
|
|
case "+":
|
|
stack[height-2] += stack[height-1]
|
|
case "-":
|
|
stack[height-2] -= stack[height-1]
|
|
case "*":
|
|
stack[height-2] *= stack[height-1]
|
|
case "/":
|
|
stack[height-2] /= stack[height-1]
|
|
default:
|
|
num, _ := strconv.ParseInt(s, 10, strconv.IntSize)
|
|
stack = append(stack, int(num))
|
|
continue
|
|
}
|
|
stack = stack[:height-1]
|
|
}
|
|
return stack[0]
|
|
}
|
|
|
|
var _ = evalRPN
|