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

LeetCode-150. Evaluate Reverse Polish Notation (JAVA)逆波兰表达式求值

2017-04-30 16:34 483 查看

150. Evaluate Reverse Polish Notation

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


从左到右遍历表达式的每个数字和字符,遇到数字就进栈,遇到符号,就将栈顶的两个数字取出(注意第一次取出的是右操作数,第二次取出的栈顶数字是左操作数),进行运算,将运算结果压栈,一直到最终获得计算结果(最终的栈顶数字)。

逆波兰式求值(后缀表达式)

public int evalRPN(String[] tokens) {
int len;
if ((len = tokens.length) == 0)
return 0;
Stack<Integer> stk = new Stack<>();
for (int i = 0; i < len; i++) {
try {
int tmp = Integer.valueOf(tokens[i]);
stk.push(tmp);
} catch (Exception e) {
// 栈的弹出顺序,先弹后面
int sec = stk.pop();
// 处理一个数字是负数的情况如{"3", "-" }
// 或者 { "6", "3", "*", "-" }
int fir = 0;
if (!stk.isEmpty())
fir = stk.pop();
int tmp = 0;
if (tokens[i].equals("+"))
tmp = fir + sec;
if (tokens[i].equals("-"))
tmp = fir - sec;
if (tokens[i].equals("*"))
tmp = fir * sec;
if (tokens[i].equals("/"))
tmp = fir / sec;
stk.push(tmp);
}
}
return stk.pop();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐