题目:https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/
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版本算法分析:时间复杂度O(n)
public class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack=new Stack<Integer>();
int x,y;
for(String str : tokens) {
if(str.equals("+")) {
stack.push(stack.pop()+stack.pop());
}else if(str.equals("-")) {
x=stack.pop();
y=stack.pop();
stack.push(y-x);
}else if(str.equals("*")) {
stack.push(stack.pop()*stack.pop());
}else if(str.equals("/")) {
x=stack.pop();
y=stack.pop();
stack.push(y/x);
}else {
stack.push(Integer.parseInt(str));
}
}
return stack.pop();
}
}