求逆波兰式
昨天面试时,面试官问,如何编程处理一个算术表达式。刚好,我做过leetcode上的一道题,就是用逆波兰式求算术表达式。然后稍微思考了一下,给出了正确结果。
面试官,接着问,如何求逆波兰式,没有想出结果来。网上看了一些资料后,现在将过程整理如下,加深印象;
(1)首先遍历算术表达式,依次遍历每个位置的字符,cur。
(1.1)如果cur为运算分量(连续的几个数字),则直接输出结果。
(1.2) 如果cur为(,则直接入栈。
如果cur为 ),依次将栈中(到栈顶的运算符,出栈。
如果cur运算符,若栈顶元素是(,则直接入栈。否则,比较cur与栈顶元素的优先级,如果比栈顶元素优先级大,则直接将当 前运算符入栈。否则,将栈顶元素出栈输出。循坏执行上面的步骤,直至优先级大于栈顶元素或者栈为空,将当前元素符入栈。
(2)栈不为空,依次输出栈中所有的运算符。
至此,方法结束。