也算比较简单的,需要一个stack放数字,每次遇到符号都把两个栈中的数字取出和符号操作,再放进去,剩下的最后一个就是答案。不过这个花时有点多。
public class Solution {
Stack<String> numbers = new Stack<>();
public int evalRPN(String[] tokens) {
int len =tokens.length;
int first = 0;
int second = 0;
String symbol = "";
int result =0;
if (len == 1)return Integer.parseInt(tokens[0]);
for (int i=0;i<len;i++){
if (tokens[i].matches("(-)*(\\d)+"))//判断是数字
numbers.add(tokens[i]);
else{
second = Integer.parseInt(numbers.pop());
//System.out.println(second);
first = Integer.parseInt(numbers.pop());
//System.out.println(first);
symbol = tokens[i];
if (symbol.equals("+")){
result = second+first;
numbers.push(String.valueOf(result));
}else if (symbol.equals("-")){
result = first - second;
numbers.push(String.valueOf(result));
}else if (symbol.equals("*")){
result = first*second ;
numbers.push(String.valueOf(result));
}else if (symbol.equals("/")){
result = first/second;
numbers.push(String.valueOf(result));
}
}
}
//System.out.println(numbers.peek());
return Integer.parseInt(numbers.pop());
}
}