LeetCode Top Interview Questions 150. Evaluate Reverse Polish Notation (Java版; Medium)
题目描述
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Note:
Division between two integers should truncate toward zero.
The given RPN expression is always valid. That means the expression would always evaluate to a result and there won't be any divide by zero operation.
Example 1:
Input: ["2", "1", "+", "3", "*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9
Example 2:
Input: ["4", "13", "5", "/", "+"]
Output: 6
Explanation: (4 + (13 / 5)) = 6
Example 3:
Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
Output: 22
Explanation:
((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22
第一次做; 稍微简化了代码
class Solution {
public int evalRPN ( String[ ] tokens) {
Stack< Integer> stack = new Stack < > ( ) ;
for ( String cur : tokens) {
if ( cur. equals ( "+" ) )
stack. push ( stack. pop ( ) + stack. pop ( ) ) ;
else if ( cur. equals ( "-" ) )
stack. push ( - stack. pop ( ) + stack. pop ( ) ) ;
else if ( cur. equals ( "*" ) )
stack. push ( stack. pop ( ) * stack. pop ( ) ) ;
else if ( cur. equals ( "/" ) ) {
int b = stack. pop ( ) , a = stack. pop ( ) ;
stack. push ( a/ b) ;
}
else
stack. push ( Integer. parseInt ( cur) ) ;
}
return stack. peek ( ) ;
}
}
第一次做; 使用栈; 这题和括号是否匹配比较像
class Solution {
public int evalRPN ( String[ ] tokens) {
Stack< Integer> stack = new Stack < > ( ) ;
for ( int i= 0 ; i< tokens. length; i++ ) {
String cur = tokens[ i] ;
if ( cur. equals ( "+" ) || cur. equals ( "-" ) || cur. equals ( "*" ) || cur. equals ( "/" ) ) {
int b = stack. pop ( ) ;
int a = stack. pop ( ) ;
if ( cur. equals ( "+" ) )
stack. push ( a+ b) ;
else if ( cur. equals ( "-" ) )
stack. push ( a- b) ;
else if ( cur. equals ( "*" ) )
stack. push ( a* b) ;
else
stack. push ( a/ b) ;
}
else {
stack. push ( Integer. parseInt ( cur) ) ;
}
}
return stack. peek ( ) ;
}
}