栈 计算四则运算

package LeetCode;
// 题目描述
//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

方法一: 
基础方法 用==  或.equlse() 方法 判断是否为符号


import java.util.*;
public class leet_2_stack {
     public static void main(String[] args) {
      String[] tokens= {"3","-4","+"};
      
         LinkedList<Integer> arr =new LinkedList<Integer>();
    
         for(String token :tokens){
              
             if( (token=="+") || (token=="-") || (token=="*") || (token.equals("/")) ){
              //System.out.println("1");
              Integer a=arr.pop();
              Integer b=arr.pop();
              Integer c=0;
              if(token=="+") {
               c=b+a;               
              }else if(token=="-") {
               c=b-a;
              } else if(token=="*") {
               c=b*a;
              } else if(token=="/") {
               c=b/a;
              }
              arr.push(c);
             }else {
              arr.push(Integer.valueOf(token));
             }
                
         }
         
         System.out.println(arr.pop());
     }
 
}


方法二:
利用异常机制 ,判断哪一位是符号
import java.util.Stack;
public class Solution {   
    public int evalRPN(String[] tokens) {        
        Stack<Integer> stack = new Stack<Integer>();        
        for(int i = 0;i<tokens.length;i++){            
            try{                
                int num = Integer.parseInt(tokens[i]);                
                stack.add(num);            
            }catch (Exception e) {
                int b = stack.pop();                
                int a = stack.pop();                
                stack.add(get(a, b, tokens[i]));            
            }        
        }        
        return stack.pop();    
    }   
    private int get(int a,int b,String operator){        
        switch (operator) {        
            case "+":            return a+b;       
            case "-":            return a-b;        
            
            case "*":            return a*b;        
            case "/":            return a/b;        
            default:            return 0;        
        }    
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值