題目
根據 逆波蘭表示法,求表達式的值。
有效的運算符包括 +, -, *, / 。每個運算對象可以是整數,也可以是另一個逆波蘭表達式。
說明:
整數除法只保留整數部分。
給定逆波蘭表達式總是有效的。換句話說,表達式總會得出有效數值且不存在除數爲 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
}