Question
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators is +,-, *,/. Each operand is an integer or another expression.
Some Examples:
["2", "1", "+", "3", "*"], ((2 + 1) * 3), 9
["4", "+", "5", "/", "+"], (4 + (13/5)), 6
1ST TRY
classSolution { Public: intEVALRPN (vector<string> &tokens) { intOperant1; intOperant2; stringstr; intret; BOOLFirstop =false; for(inti =0; I < tokens.size (); i++) {str=Tokens[i]; if(!firstop) {Operant1=getInt (str);; Firstop=true; } Else if(str = ="+") {ret= Operant1 +Operant2; } Else if(str = ="-") {ret= Operant1-Operant2; } Else if(str = ="*") {ret= Operant1 *Operant2; } Else if(str = ="/") {ret= OPERANT1/Operant2; } Else{Operant2=getInt (str); Firstop=false; } } returnret; } intGetInt (stringstr) { intRET =0; for(inti =0; I < str.length (); i++) {ret= ret*Ten+Str[i]; } returnret; }};
2ND TRY
Consider a situation where there is only one operand
classSolution { Public: intEVALRPN (vector<string> &tokens) { intOperant1; intOperant2; stringstr; intret; BOOLFirstop =false; for(inti =0; I < tokens.size (); i++) {str=Tokens[i]; if(!firstop) {Operant1=getInt (str); Firstop=true; } Else if(str = ="+") {Operant1+=Operant2; } Else if(str = ="-") {Operant1-=Operant2; } Else if(str = ="*") {Operant1*=Operant2; } Else if(str = ="/") {Operant1/=Operant2; } Else{Operant2=getInt (str); } } returnOperant1; } intGetInt (stringstr) { intRET =0; for(inti =0; I < str.length (); i++) {ret= ret*Ten+ (str[i]-'0'); } returnret; }};
Result:wrong
Input: ["3", "4", "+"]
Output: 23
Expected:-1
3RD TRY
Consider the case of negative numbers
classSolution { Public: intEVALRPN (vector<string> &tokens) { intOperant1; intOperant2; intret; stringstr; Stack<int>Operantstack; for(inti =0; I < tokens.size (); i++) {str=Tokens[i]; if(str = ="+") {Operant2=Operantstack.top (); Operantstack.pop (); Operant1=Operantstack.top (); Operantstack.pop (); Operantstack.push (Operant1+Operant2); } Else if(str = ="-") {Operant2=Operantstack.top (); Operantstack.pop (); Operant1=Operantstack.top (); Operantstack.pop (); Operantstack.push (Operant1-Operant2); } Else if(str = ="*") {Operant2=Operantstack.top (); Operantstack.pop (); Operant1=Operantstack.top (); Operantstack.pop (); Operantstack.push (Operant1*Operant2); } Else if(str = ="/") {Operant2=Operantstack.top (); Operantstack.pop (); Operant1=Operantstack.top (); Operantstack.pop (); Operantstack.push (Operant1/Operant2); } Else{operantstack.push (getInt (str)); } } returnOperantstack.top (); } intGetInt (stringstr) { intRET =0; BOOLNegflag =false; for(inti =0; I < str.length (); i++) { if(str[i]=='-') Negflag =true; Else if(negflag) {ret= ret*Ten-(str[i]-'0'); } Else{ret= ret*Ten+ (str[i]-'0'); } } returnret; }};
result:accepted
4TH TRY
Convert a string to an int using the built-in function atoi
classSolution { Public: intEVALRPN (vector<string> &tokens) {Stack<int>Operandstack; intOperand1; intOperand2; for(inti =0; I < tokens.size (); i++){ if(tokens[i]=="+") {Operand1=Operandstack.top (); Operandstack.pop (); Operand2=Operandstack.top (); Operandstack.pop (); Operand2+=Operand1; Operandstack.push (OPERAND2); } Else if(tokens[i]=="-") {Operand1=Operandstack.top (); Operandstack.pop (); Operand2=Operandstack.top (); Operandstack.pop (); Operand2-=Operand1; Operandstack.push (OPERAND2); } Else if(tokens[i]=="*") {Operand1=Operandstack.top (); Operandstack.pop (); Operand2=Operandstack.top (); Operandstack.pop (); Operand2*=Operand1; Operandstack.push (OPERAND2); } Else if(tokens[i]=="/") {Operand1=Operandstack.top (); Operandstack.pop (); Operand2=Operandstack.top (); Operandstack.pop (); Operand2/=Operand1; Operandstack.push (OPERAND2); } Else{operand1=atoi (Tokens[i].c_str ()); Operandstack.push (OPERAND1); } } returnOperandstack.top (); }};
result:accepted
Evaluate Reverse Polish Notation (String-type convertion)