您的位置:首页 > 编程语言 > Lua

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

2017-03-17 21:18 701 查看
一,问题描述

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode
相关文章推荐