【leetcode】Evaluate Reverse Polish Notation

来源:互联网 发布:知乎最高赞答案 编辑:程序博客网 时间:2024/05/17 00:57

题目的意思就是计算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));}}


0 0
原创粉丝点击