flag
软件学院大三党,每天一道算法题,第30天
题目介绍
根据逆波兰表示法,求表达式的值。
逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation
思路
仔细观察这个tokens数组,每个运算符之前一定有至少两个数字,数组最后一定是运算符
我们采用一个装整数的栈,遍历这个数组,当遇到数字的时候,将数字入栈,当遇到运算符的时候,将栈顶的两个元素出栈,经过运算后的数字再入栈。
关键代码
public static int evalRPN(String[] tokens){
Stack<Integer> stack=new Stack();
int len=tokens.length;
int result=0;
for(int i=0;i<len;i++){
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
int x1=stack.pop();
int x2=stack.pop();
int x3;
if(tokens[i]=="+")
x3=x2+x1;
else if(tokens[i]=="-")
x3=x2-x1;
else if(tokens[i]=="*")
x3=x2*x1;
else
x3=x2/x1;
stack.push(x3);
}
else {
stack.push(Integer.parseInt(tokens[i]));
}
}
return stack.pop();
}