逆波兰表达式求值
题目描述:
根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
思路:
我们以+ - * / 作为开关语句的case条件,遇到运算符,就将其前的两个数字进行相应的运算,若遍历到最后没有运算符则将字符串转换成数值返回。
代码:
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer>numStack=new Stack<>();
Integer s1,s2;
for(String s:tokens)
{
switch(s)
{
case "+":
s2=numStack.pop();
s1=numStack.pop();
numStack.push(s1+s2);
break;
case "-":
s2=numStack.pop();
s1=numStack.pop();
numStack.push(s1-s2);
break;
case "*":
s2=numStack.pop();
s1=numStack.pop();
numStack.push(s1*s2);
break;
case "/":
s2=numStack.pop();
s1=numStack.pop();
numStack.push(s1/s2);
break;
default:
numStack.push(Integer.valueOf(s));
break;
}
}
return numStack.pop();
}
}
运行结果:
总结:
多了解借助栈的“先进后出”的特点有助于简化题目信息提供不一样的解题思路。注意s1和s2的顺序,否则在“-”和“/”时会出错。