Java实现逆波兰表达式求值
2020-07-16 05:46
155 查看
根据 逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
逆波兰表达式说白了就是后缀表达式,所以求后缀表达式的值用栈很好解决,遇到数字就压进栈,不是就出栈计算,将结果再压进栈,最终栈内的就是最终的结果。
不多说,直接上代码
未优化。轻喷(手动狗头)
public int evalRPN(String[] tokens) { int values=0,result=0; Stack<Integer> stack = new Stack<>(); for(int i=0;i<tokens.length;i++){ switch(tokens[i]){ //+,-,*,/ 四种运算 case "+": result = stack.pop() + stack.pop(); stack.push(result); break; case "-": result = -stack.pop() + stack.pop(); stack.push(result); break; case "*": result = stack.pop() * stack.pop(); stack.push(result); break; case "/": int first = stack.pop(); int second = stack.pop(); result = second / first; stack.push(result); break; default: int sign=0;//标志是否为负数 result=0; for(int k=0,j=tokens[i].length()-1;k<tokens[i].length()&&j>=0;k++,j--){//如果不是个位数通过此循环求出 if(tokens[i].charAt(k)=='-'){ sign = 1; continue; } result += (tokens[i].charAt(k)-'0') * Math.pow(10,j); } if(sign==1) result = -result; stack.push(result); } } values = stack.peek(); return values; }
相关文章推荐
- Java实现-逆波兰表达式求值
- 表达式求值 - Java实现
- 数据结构Java实现——①栈-->栈的应用三、算术表达式求值
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- (学习java)顺序栈实现逆波兰表达式
- 中缀表达式转换为前缀及后缀表达式并求值(java实现)
- 利用栈实现算术表达式求值(Java语言描述)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Python实现数据结构与算法——逆波兰表达式求值
- java实现任意四则运算表达式求值算法
- JAVA实现字符表达式的计算的实现(一)--逆波兰式的实现
- LeetCode-150. Evaluate Reverse Polish Notation (JAVA)逆波兰表达式求值
- java后缀表达式实现表达式求值
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 【Algorithm】逆波兰表达式 Java实现
- 表达式求值,Java实现
- 算术表达式求值(中缀转后缀,后缀求值,java 栈实现)
- 数据结构习作之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (技术含量少许)
- java使用栈和逆波兰表达式实现四则运算
- java实现表达式求值