算法九

xiaoxiao2021-02-28  100

RPN表达式

算法描述

RPN是对算数表达式的一种描述,描述中不含括号RPN经常用于虚拟机上,比如JVMRPN的书写特点之一是:操作符写在数字之后例如,“3-4” 可以写成 “3 4 -”同样的,“(3 - 4) * 5”可以写成 “3 4 - 5”注意以下,虽然没有括号,单RPN表达式依然没有歧义再比如,“3 - (4 * 5)” 会被写为“3 4 5 * -”RPN表达式通过一个栈来计算,表达式总左至右来处理遇到的每个数字被放入到栈中,遇到操作符时,合适的数字从栈中提取出来,进行计算,计算结果再入栈最后,栈的顶部数字就是表达式的值RPN支持的运算符包括加(+)、减(-)、乘(*)、负(~)例如,RPN表达式“2 3 + 6 ~ 7 * -”可以按照如下方式计算 Remaining Expression Stack New Stack 2 3 + 6 ~ 7 * - [] [2] 3 + 6 ~ 7 * - [2] [2 3] <---- Stacks grow to the right + 6 ~ 7 * - [2 3] [5] 6 ~ 7 * - [5] [5 6] ~ 7 * - [5 6] [5 -6] 7 * - [5 -6] [5 -6 7] * - [5 -6 7] [5 -42] - [5 -42] [47] <---- Final answer is 47 若是因为RPN表达式构造不合理,你可以返回-999

参数定义

类名 RPN方法 evaluate输入参数 string输出 string方法声明 int evaluate(string expr)

限制条件

expr包含奇数个字符expr 的奇数位置是空格expr 的偶数位置是[0 - 9] ,或者符号加(+)、减(-)、乘(*)、负(~)

例子

输入 expr: “2 3 + 6 ~ 7 * -“输出 47

测试实例

实例一

输入

”5 ~ ~ ~”

输出

-5

实例二

输入 ”9 8 7 * * 4 5 - -“输出 505

实例三

输入 ”1 + 2 + 3” 输出 -999

实例四

输入 ”1 9 ~ 2 8 * +” 输出 -999
转载请注明原文地址: https://www.6miu.com/read-36451.html

最新回复(0)