/*
力扣题号:150逆波兰表达式求值
逆波兰表达式即后缀表达式
【题目描述】:
给出逆波兰表达式,求得对应的值
【示例一】
输入:["5","2","-","4","*"]
输出:12
解释:该算式转化为常见的中缀算术表达式为((5-2) x 4) = 12
*/
解题思路:
仔细分析,本题中每一个子表达式要得到一个结构,然后将这个结果再进行运算,其实就是相邻字符串消除的过程
以题目为例子:["5","2","-","4","*"],当遍历到运算符时,可以取之前两位数字进行运算 5-2,得到结果后3
继续遍历,当遇到“*”,就可以处理3*4,得到结果
技巧:
相邻元素之间最好的数据机构就是栈
代码如下:
public int evelNRN(String[] tokens){
Deque stack =new LinkedList();
for (String s : tokens){
if (s.equals("+") || s.equals("-") || s.equals("*") ||s.equals("/")){
Integer i1 = stack.pop();
Integer i2 = stack.pop();
Integer val =0;
if (s.equals("+")){
val = i1 + i2;
}
if (s.equals("-")){
val = i2 - i1;
}
if (s.equals("*")){
val = i1 * i2;
}
if (s.equals("/")){
val = i2 / i1;
}
stack.push(val);
}else{
stack.push(Integer.valueOf(s));
}
}
return stack.pop();
}