首页 > 代码库 > 【Leetcode】Evaluate Reverse Polish Notation
【Leetcode】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大家其实百度一下“逆波兰表达式”就可以了~
(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。
(2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。
(3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。
(4)如果不是数字,该字符则是运算符,此时需比较优先关系。
做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将栈顶的运算符从栈中弹出,直到栈顶运算符的优先级低于当前运算符,将该字符入栈。
(5)重复上述操作(3)-(4)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。
import java.util.Stack; public class EvaluateReversePolishNotation { public static void main(String args[]){ EvaluateReversePolishNotation erp = new EvaluateReversePolishNotation(); String[] tokens = {"3", "-4", "+"}; System.out.println(erp.evalRPN(tokens)); } public int evalRPN(String[] tokens) { Stack<Integer> stack = new Stack<Integer>(); int input; for(int i=0;i<tokens.length;i++){ if(tokens[i].charAt(0)>='0'&&tokens[i].charAt(0)<='9') {input = Integer.parseInt(tokens[i]); stack.push(input); } else if(tokens[i].length()>1&&tokens[i].charAt(0)=='-'){ input = Integer.parseInt(tokens[i]); stack.push(input); } else if(tokens[i].charAt(0)=='+') stack.push(stack.pop()+stack.pop()); else if(tokens[i].charAt(0)=='-'){ int tmp = stack.pop(); stack.push(stack.pop()-tmp); } else if(tokens[i].charAt(0)=='/'){ int tmp = stack.pop(); stack.push(stack.pop()/tmp); } else if(tokens[i].charAt(0)=='*') stack.push(stack.pop()*stack.pop()); } return stack.peek(); } }
【Leetcode】Evaluate Reverse Polish Notation
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。