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

evaluate-reverse-polish-notation(Leetcode)

2016-05-29 22:32 302 查看

题目描述

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

题意是计算给定表达式的值,将操作数放在一个栈中,每遇到一个操作符从栈中弹出两个数字。

package sxd.learn.java.leetcode;

/**
*
* @author lab
* 2016/5/12
* Evaluate the value of an arithmetic expression in
* Reverse Polish Notation.
*/
public class Leetcode2 {

public static void main(String[] args) {
String[] test = { "0", "3", "/" };
System.out.println(evalRPN(test));
}

public static int evalRPN(String[] tokens) {
java.util.Stack<Integer> numStack = new java.util.Stack<>();
String num = null;
for (int i = 0; i < tokens.length; i++) {
num = tokens[i];
if (!isOper(num)) {
numStack.push(Integer.parseInt(num));
} else {
int num1 = numStack.pop();
int num2 = numStack.pop();
numStack.push(operation(num, num1, num2));
}
}
return numStack.pop();
}

public static boolean isOper(String str){
if(str.length() == 1){
if(str.charAt(0) == '+' || str.charAt(0) == '-')
return true;
else if(str.charAt(0) == '*' || str.charAt(0) == '/')
return true;
return false;
}
return false;
}

public static int operation(String op, int num1, int num2) {
int num = 0;
switch (op) {
case "+":
num = num2 + num1;
break;
case "-":
num = num2 - num1;
break;
case "*":
num = num2 * num1;
break;
case "/":
num = num2 / num1;
break;

default:
break;
}
return num;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode