题目描述:
示例 1:
输入:tokens = [“2”,“1”,“+”,“3”,“*”] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) *
3) = 9 示例 2:输入:tokens = [“4”,“13”,“5”,“/”,“+”] 输出:6 解释:该算式转化为常见的中缀算术表达式为:(4 + (13
/ 5)) = 6 示例 3:输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,““,”/“,””,“17”,“+”,“5”,“+”]
输出:22 解释:该算式转化为常见的中缀算术表达式为: ((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<>();
int num1,num2;
for(int i=0;i<tokens.length;i++)
{
if(isNumber(tokens[i]))
{
stack.push(Integer.parseInt(tokens[i]));
}else
{
num2=stack.pop();
num1=stack.pop();
switch(tokens[i])
{
case "+":
num1=num1+num2;
break;
case "-":
num1=num1-num2;
break;
case "*":
num1=num1*num2;
break;
case "/":
num1=num1/num2;
break;
}
stack.push(num1);
}
}
return stack.pop();
}
public boolean isNumber(String ch)
{
return !("+".equals(ch)||"-".equals(ch)||"*".equals(ch)||"/".equals(ch));
}
}
解法二:数组模拟栈
class Solution {
public int evalRPN(String[] tokens) {
int n=tokens.length;
int [] stack=new int[(n+1)/2];
int index=-1;
for(int i=0;i<n;i++)
{
String token=tokens[i];
switch(token){
case "+":
index--;
stack[index]+=stack[index+1];
break;
case "-":
index--;
stack[index]-=stack[index+1];
break;
case "*":
index--;
stack[index]*=stack[index+1];
break;
case "/":
index--;
stack[index]/=stack[index+1];
break;
default:
index++;
stack[index]=Integer.parseInt(token);
}
}
return stack[index];
}
}