题目
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
思路
活活一个水题...用栈的思路来做
代码
public class Solution {
public int evalRPN(String[] tokens) {
ArrayList<Integer> num = new ArrayList<Integer>();
ArrayList<String> ope = new ArrayList<String>();
for(String oper:tokens)
{
if(oper.equals("+")||oper.equals("-")||oper.equals("*")||oper.equals("/"))
{
if(oper.equals("+"))
{
Integer num1 = num.get(num.size()-1);
Integer num2 = num.get(num.size()-2);
num.remove(num.size()-1);
num.remove(num.size()-1);
if(num.size()==0)
num.add(num1+num2);
else
num.add(num.size(), num1+num2);
}
else if(oper.equals("-"))
{
Integer num1 = num.get(num.size()-1);
Integer num2 = num.get(num.size()-2);
num.remove(num.size()-1);
num.remove(num.size()-1);
if(num.size()==0)
num.add(num2-num1);
else
num.add(num.size(), num2-num1);
}
else if(oper.equals("*"))
{
Integer num1 = num.get(num.size()-1);
Integer num2 = num.get(num.size()-2);
num.remove(num.size()-1);
num.remove(num.size()-1);
if(num.size()==0)
num.add( num1*num2);
else
num.add(num.size(), num1*num2);
}
else if(oper.equals("/"))
{
Integer num1 = num.get(num.size()-1);
Integer num2 = num.get(num.size()-2);
num.remove(num.size()-1);
num.remove(num.size()-1);
if(num.size()==0)
num.add( num2/num1 );
else
num.add(num.size(), num2/num1);
}
}
else
{
num.add(Integer.parseInt(oper));
}
}
return num.get(0);
}
}