[LeecCode]Evaluate Reverse Polish Notation

题目描述

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are +-*/. Each operand may be an integer or another expression.

Some examples:

  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
计算后缀表达式。

解题思路

      逆波兰表达式(Evaluate Reverse Polish Notation)又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
     一看此题,肯定想到了栈。每次取栈顶的两个数进行运算将运算结果置入栈中,最终栈中仅剩的一个元素为表达式的结果。

代码

 public int evalRPN(String[] tokens) {
         Stack<Integer> stack = new Stack<Integer>();
       String tempStr;
       for(int i = 0;i < tokens.length;i++){
    	   tempStr = tokens[i];
    	   if(tempStr.equals("+") || tempStr.equals("-") ||tempStr.equals("*") ||tempStr.equals("/") ){
    		  int num2 = stack.pop();
    		  int num1 = stack.pop();
    		  int result = 0;
    		  if(tempStr.equals("+")){
    			  result = num1 + num2;
    		  } else if(tempStr.equals("-")){
    			  result = num1 - num2;
    		  } else if(tempStr.equals("*")){
    			  result = num1 * num2;
    		  } else if(tempStr.equals("/")){
    			  result = num1 / num2;
    		  }
    		  stack.push(result);
    		  
    	   } else {
    		   stack.push(Integer.valueOf(tokens[i]));
    	   }
       }
       return stack.pop();
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值