题目描述:
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):
import java.util.*;
public class Solution {
public int evalRPN(String[] tokens) {
if(tokens.length==0)return 0;
if(tokens.length==1)return Integer.parseInt(tokens[0]);
Stack<Integer> stack=new Stack<Integer>();
for(int i=0;i<tokens.length;i++){
if(tokens[i].equals("+")|| tokens[i].equals("-") || tokens[i].equals("*") || tokens[i].equals("/")){
if(stack.size()==1)return stack.pop();
int a1=stack.pop();
int a2=stack.pop();
stack.push(compute(a2,a1,tokens[i]));
}
else{
stack.push(Integer.parseInt(tokens[i]));
}
}
return stack.pop();
}
public int compute(int a1,int a2,String cop){
int result=0;
if(cop.equals("+")) result=a1+a2;
else if(cop.equals("-"))result=a1-a2;
else if(cop.equals("*"))result=a1*a2;
else if(cop.equals("/"))result=a1/a2;
return result;
}
}