逆波兰表达式求值
思路
遇到数字将数字入栈
遇到操作符 提出两个字符 然后将新的数字入栈
class Solution {
public int evalRPN(String[] tokens) {
Deque<Integer> stack = new LinkedList<Integer>(); //初始化一个栈
int n = tokens.length;
for (int i = 0; i < n; i++) {
String token = tokens[i];
if (isNumber(token)) { //判断当前字符是否是数字
stack.push(Integer.parseInt(token));
} else {
int num2 = stack.pop(); //数字出栈先出的是num2
int num1 = stack.pop();//num1 再出栈 因为操作计算的时候被除数和除数不能换位置
switch (token) {//操作符处理
case "+":
stack.push(num1 + num2);
break;
case "-":
stack.push(num1 - num2);
break;
case "*":
stack.push(num1 * num2);
break;
case "/":
stack.push(num1 / num2);
break;
default:
}
}
}
return stack.pop(); //最后栈里的数字就是答案
}
/**
判断当前字符是否是数字
**/
public boolean isNumber(String token) {
return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));
}//非+-*/运算符就是数字
}