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

来源:互联网 发布:算法工程师培训班 编辑:程序博客网 时间:2024/06/05 01:53

一,问题描述
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

1 0