Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
Java:
1. http://blog.csdn.net/linhuanmars/article/details/21058857
"以上代码中有一个没有周全的地方是没有对逆波兰式错误的情况进行出错处理,其实也不难,就是每次pop操作检查栈空情况,如果栈空,则说明出错。还有就是最后检查一下栈的size,如果不是1也说明运算数多了,返回错误。有兴趣的朋友可以自己补充一下哈。"
public class Solution {
public int evalRPN(String[] tokens) {
if(tokens==null||tokens.length==0) return 0;
LinkedList<Integer> stack= new LinkedList<Integer>();
for(int i=0;i<tokens.length;i++)
{
if(tokens[i].equals("+"))
{
stack.push(stack.pop()+stack.pop());
}
else if(tokens[i].equals("-"))
{
int m1=stack.pop();
int m2=stack.pop();
stack.push(m2-m1);
}
else if(tokens[i].equals("*"))
{
stack.push(stack.pop()*stack.pop());
}
else if(tokens[i].equals("/"))
{
int m1=stack.pop();
int m2=stack.pop();
stack.push(m2/m1);
}
else{
stack.push(Integer.parseInt(tokens[i]));
}
}
return stack.pop();
}
}