题目
根据 逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:
输入: [“2”, “1”, “+”, “3”, “*”]
输出: 9
解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
分析
逆波兰表达式,其实就是扫描到运算符的时候,就从栈里弹出两个元素进行计算,计算完了将结果再压入栈中。
解法
func evalRPN(tokens []string) int {
var stack []int
for _, s := range tokens {
if s != "+" && s != "-" && s != "*" && s != "/" {
stack = append(stack, tonum(s))
} else {
b := stack[len(stack)-1]
a := stack[len(stack)-2]
stack = stack[:len(stack)-2]
switch s {
case "+":
a = a + b
case "-":
a = a - b
case "*":
a = a * b
case "/":
a = int(a/b)
}
stack = append(stack, a)
}
}
return stack[0]
}
func tonum(n string) int {
num, _ := strconv.Atoi(n)
return num
}