Leetcode 150 Evaluate Reverse Polish Notation (求值逆波兰表达式)

26 篇文章 0 订阅
14 篇文章 0 订阅

一,问题描述
1,用逆波兰表达式法去计算算术表达式的值。其中,有效运算符为+,-,*,/。每个操作数可以是整数或者另一个表达式

2,例如:
这里写图片描述

3,解题思路:
先定义一个栈用来存放数据的,然后对字符串数组进行从左到后进行扫描,如果遇到的是字符串符号(+,-,*,/),则从栈中取出两个整数进行符号操作的,再把结果放回栈中,如果遇到的是字符串整数,直接存放在栈中去,一直到字符串数组全部扫描完。

二,AC了的程序(用java实现的)

import java.util.*;
public class Test2{

    public int evalRPN(String []tokens)
    {

        if(tokens==null||tokens.length==0)
        {
            return -1;
        }

        Stack<Integer> stack=new Stack<Integer>(); //这个stack用来存放整数的,不存放符号+,-,*,/

        for(int i=0;i<tokens.length;i++)
        {
            if(tokens[i].equals("+")||tokens[i].equals("-")||tokens[i].equals("*")||tokens[i].equals("/"))
            {
                int data1=stack.pop();//出栈第一个整数,栈的规则是先进后出的,因此对于
                int data2=stack.pop();//出栈第二个整数
                //System.out.println("data1="+data1);
                //System.out.println("data2="+data2);
                int data3;

                if(tokens[i].equals("+"))
                {
                    data3=data1+data2;

                    stack.push(data3);
                }else if(tokens[i].equals("-"))
                {
                    data3=data2-data1;
                    stack.push(data3);
                }else if(tokens[i].equals("*"))
                {
                    data3=data1*data2;
                    stack.push(data3);
                }else if(tokens[i].equals("/"))
                {
                    data3=data2/data1;
                    stack.push(data3);
                }
            }
            else
            {
                int data=Integer.parseInt(tokens[i]); //把字符串转化为整数
                stack.push(data);  //当碰到整数的话,就是直接入栈。
            }
        }

        int data4=stack.pop();

        return data4;


    }

    public static void main(String []args)
    {
        Test2 test=new Test2();
        //String []tokens={"2","1","+","3","*"};
        String []tokens={"4","13","5","/","+"};

        int result=test.evalRPN(tokens);

        System.out.println("result="+result);
    }

}

运行结果

result=6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值