描述
给定一个逆波兰表达式,求表达式的值。
数据范围:表达式长度满足 1≤�≤104 1≤n≤104 ,表达式中仅包含数字和 + ,- , * , / ,其中数字的大小满足 ∣���∣≤200 ∣val∣≤200 。
示例1
输入:
["2","1","+","4","*"]
复制返回值:
12
复制
示例2
输入:
["2","0","+"]
复制返回值:
2
import java.util.*;
public class Solution {
/**
* 解题思路::
* 由题意值前两个是数字第三个才是运算符,
* 所以我们直接遍历数组将数字存入栈中运算符提出来
* 根据运算符,算完后数据直接存入栈中,最后返回栈顶元素。
*
*
* @param tokens string字符串一维数组
* @return int整型
*/
public int evalRPN (String[] tokens) {
// write code here
Stack<Integer> stack=new Stack<>();
int sum=0;
for(int i=0;i<tokens.length;i++){
if(tokens[i].equals("+")||tokens[i].equals("-")||tokens[i].equals("*")||tokens[i].equals("/")){
int n1=stack.pop();
int n2=stack.pop();
if(tokens[i].equals("+")) stack.push(n2+n1);
if(tokens[i].equals("-")) stack.push(n2-n1);
if(tokens[i].equals("/")) stack.push(n2/n1);
if(tokens[i].equals("*")) stack.push(n2*n1);
}
else {
stack.push(Integer.valueOf(tokens[i]));
}
}
return stack.peek();
}
}