2021-10-17:逆波兰表达式求值。根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰
2021-10-17:逆波兰表达式求值。根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。力扣150。
福大大 答案2021-10-17:
栈。遇到数字,压栈。遇到运算符,计算。
时间复杂度:O(N)。
空间复杂度:O(N)。
代码用golang编写。代码如下:
package main
import (
"fmt"
"strconv"
)
func main() {
tokens := []string{"2", "1", "+", "3", "*"}
ret := evalRPN(tokens)
fmt.Println(ret)
}
func evalRPN(tokens []string) int {
stack := make([]int, 0)
for _, str := range tokens {
if str == "+" || str == "-" || str == "*" || str == "/" {
compute(&stack, str)
} else {
i, _ := strconv.Atoi(str)
stack = append(stack, i)
}
}
return stack[len(stack)-1]
}
func compute(stack *[]int, op string) {
num2 := (*stack)[len(*stack)-1]
*stack = (*stack)[0 : len(*stack)-1]
num1 := (*stack)[len(*stack)-1]
*stack = (*stack)[0 : len(*stack)-1]
ans := 0
switch op {
case "+":
ans = num1 + num2
break
case "-":
ans = num1 - num2
break
case "*":
ans = num1 * num2
break
case "/":
ans = num1 / num2
break
}
*stack = append(*stack, ans)
}
执行结果如下:
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2020-10-17 2020-10-17:谈一谈DDD面向领域编程。