LeetCode150. Evaluate Reverse Polish Notation
Posted 月盡天明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode150. Evaluate Reverse Polish Notation相关的知识,希望对你有一定的参考价值。
Subject
https://leetcode.com/problems/evaluate-reverse-polish-notation/
Explain
https://en.wikipedia.org/wiki/Reverse_Polish_notation
Reverse Polish Notation – RPN
也就是 “逆波兰式” ,又称 “后缀表达式” 。
如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+。当然还有前缀表达式+ab。
这道题目的意思就是给定一个运算串,按照后缀表达式的规则计算出最后的结果。
Solution 1
通过栈这种数据结构,当判断到是符号时,从栈中取出两个数值进行运算,然后继续入栈。
// 13ms
public int evalRPN(String[] tokens)
if (tokens == null)
return 0;
if (tokens.length == 1)
return Integer.parseInt(tokens[0]);
Stack<String> stack = new Stack<>();
int result = 0;
for (int i = 0; i < tokens.length; i++)
if (checkTokenValid(tokens[i]))
if (stack.size() < 2)
result = 0;
break;
result = getResultForOneToken(tokens[i], stack.pop(), stack.pop());
stack.push(Integer.toString(result));
else
stack.push(tokens[i]);
return result;
public boolean checkTokenValid(String token)
if (token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/"))
return true;
return false;
public int getResultForOneToken(String token, String rightStr, String leftStr)
int left = 0;
int right = 0;
try
left = Integer.parseInt(leftStr);
right = Integer.parseInt(rightStr);
catch (NumberFormatException e)
e.printStackTrace();
switch (token)
case "+":
return left + right;
case "-":
return left - right;
case "*":
return left * right;
case "/":
return left / right;
return 0;
End
当然这道题目可以扩展为一个 波兰式 的题目。
以上是关于LeetCode150. Evaluate Reverse Polish Notation的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode150. Evaluate Reverse Polish Notation
刷题-LeetCode150 Evaluate Reverse Polish Notation
[LeetCode] 150. Evaluate Reverse Polish Notation
[LeetCode] 150. Evaluate Reverse Polish Notation