题目的意思就是计算RPN表达式的值,leetcode上原题太简单,很多情况都没有考虑,比如大整数的情况、如果操作过程出错的情况等等
解决方法为用一个栈即可,这点在数据结构课上算是基本的了
代码如下:
import java.math.BigInteger;
import java.util.Stack;
/**
* 计算RPN表达式的值
* @author JeremyCai
*
*/
public class Solution {
public int evalRPN(String[] tokens){
try{
Stack<String> stack = new Stack<String>();
int size = tokens.length;
for(int i = 0; i <= size - 1; i++){
if(tokens[i].equals("/")){
BigInteger second = new BigInteger(stack.pop());
BigInteger first = new BigInteger(stack.pop());
stack.push(first.divide(second).toString());
}
else if(tokens[i].equals("*")){
BigInteger second = new BigInteger(stack.pop());
BigInteger first = new BigInteger(stack.pop());
stack.push(first.multiply(second).toString());
}
else if(tokens[i].equals("+")){
BigInteger second = new BigInteger(stack.pop());
BigInteger first = new BigInteger(stack.pop());
stack.push(first.add(second).toString());
}
else if(tokens[i].equals("-")){
BigInteger second = new BigInteger(stack.pop());
BigInteger first = new BigInteger(stack.pop());
stack.push(first.subtract(second).toString());
}
else{
stack.push(tokens[i]);
}
}
if(stack.size() != 1)
return -1;//此处返回-1不是很合理
return Integer.parseInt(stack.peek());
}catch(Exception e){
return -1;//此处返回-1不是很合理
}
}
public static void main(String[] args){
Solution s = new Solution();
String[] tokens = new String[5];
tokens[0] = "2";
tokens[1] = "1";
tokens[2] = "+";
tokens[3] = "3";
tokens[4] = "*";
System.out.println(s.evalRPN(tokens));
}
}