Evaluate 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 c++版本:
class Solution{public: int evalRPN(vector&tokens){ if(tokens.size()==1) return stoi(*tokens.begin()); stack numbers; vector ::iterator it=tokens.begin(); int op1=0; int op2=0; while(it!=tokens.end()){ if(*it=="+"||*it=="-"||*it=="*"||*it=="/"){ op2=numbers.top(); numbers.pop(); op1=numbers.top(); numbers.pop(); if(*it=="+") numbers.push(op1+op2); else if(*it=="-") numbers.push(op1-op2); else if(*it=="*") numbers.push(op1*op2); else numbers.push(op1/op2); } else numbers.push(stoi(*it)); it++; } return numbers.top();}};
Java版本:
public class Solution { public int evalRPN(String[] tokens) { int returnValue = 0; String operators = "+-*/"; Stackstack = new Stack (); for(String t:tokens) { if(!operators.contains(t)) { stack.push(t); } else { int a = Integer.valueOf(stack.pop()); int b = Integer.valueOf(stack.pop()); int index = operators.indexOf(t); switch(index){ case 0: stack.push(String.valueOf(a+b)); break; case 1: stack.push(String.valueOf(b-a)); break; case 2: stack.push(String.valueOf(a*b)); break; case 3: stack.push(String.valueOf(b/a)); break; } } } returnValue = Integer.valueOf(stack.pop()); return returnValue; }}