Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情
描述
给定一个逆波兰表达式,求表达式的值。
数据范围:表达式长度满足1≤n≤104 ,表达式中仅包含数字和 + ,- , * , / ,其中数字的大小满足 0 ≤∣val∣≤200 。
示例1
输入:
["2","1","+","4","*"]
返回值:
12
示例2
输入:
["2","0","+"]
返回值:
2
思路
其实就是一个栈的简单应用,遇到数字就入栈,遇到运算符就计算出栈,最终保留结果。
AC Code
package main
import "strconv"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串一维数组
* @return int整型
*/
func evalRPN( tokens []string ) int {
// write code here
(1) if len(tokens)<3{
(2) ans,_:=strconv.Atoi(tokens[0])
(3) return ans
}
ans := make([]int,0)
(4) for _,t:=range tokens{
switch t {
(5) case "+":
ans[len(ans)-2]+=ans[len(ans)-1]
ans=ans[:len(ans)-1]
(6) case "-":
ans[len(ans)-2]-=ans[len(ans)-1]
ans = ans[:len(ans)-1]
(7) case "*":
ans[len(ans)-2]*=ans[len(ans)-1]
ans=ans[:len(ans)-1]
(8) case "/":
ans[len(ans)-2]/=ans[len(ans)-1]
ans = ans[:len(ans)-1]
(9) default:
a,_ := strconv.Atoi(t)
ans = append(ans, a)
}
}
(10) return ans[0]
}
- (1) 如果这里小于三个字符,就直接返回第一个数字即可
- (2) 转化成整型
- (3) 返回答案
- (4) 遍历这个tokens,对每一个值进行计算处理
- (5) 如果是+号就对前后数组进行相加,并且赋值给第一个数
- (6) 如果是-号就对前后数组进行相减,并且赋值给第一个数
- (7) 如果是*号就对前后数组进行相乘,并且赋值给第一个数
- (8) 如果是/号就对前后数组进行相除,并且赋值给第一个数
- (9) 如果都不是的话,就说明这是值就直接压入栈中
- (10) 最后返回栈里只有一个元素,就是我们的值了