【leetcode】:Evaluate Reverse Polish Notation (python)
2014-07-04 17:52
507 查看
逆波兰式的求解,建立一个类栈容器,遍历给定的逆波兰表达式,遇到数字就push, 遇到操作符就进行出栈,连续出两次,因为给定的四则运算符都是双目的,这里注意下这两个操作数的先后顺序,因为对于加法和乘法没关系,但是对于减法和除法是有先后关系的。然后进行相应的运算,将结果push进栈中。
这里附带说明下python中进行除法运算与c,java系列中的除法的不同,就是向下取整的问题。这种不同表现在两个操作数符号不同时的情况。
在c 中 3 / -5 = 0,但是在python中, 结果却为 - 1。这种不同是什么原因呢?或者python为何做这样的调整呢?
我们把这种表达形式抽象一下, a / b = q, 余数为 r 。
a = ( b * q ) + r
但是我们发现在上例中,c 得到的结果会是 ( 0 * (-5) ) + ( - 2 ) = -2 是不等于 -5的,但是在python中, ( -1 * (-5)) + ( -2 ) = 5 - 2 = 3。
也就是python中的处理更符合数学的美感,(姑且这么讲吧)
这里附带说明下python中进行除法运算与c,java系列中的除法的不同,就是向下取整的问题。这种不同表现在两个操作数符号不同时的情况。
在c 中 3 / -5 = 0,但是在python中, 结果却为 - 1。这种不同是什么原因呢?或者python为何做这样的调整呢?
我们把这种表达形式抽象一下, a / b = q, 余数为 r 。
a = ( b * q ) + r
但是我们发现在上例中,c 得到的结果会是 ( 0 * (-5) ) + ( - 2 ) = -2 是不等于 -5的,但是在python中, ( -1 * (-5)) + ( -2 ) = 5 - 2 = 3。
也就是python中的处理更符合数学的美感,(姑且这么讲吧)
class Solution: def isOp(self, s): return s == "+" or \ s == "-" or \ s == "*" or \ s == "/" def add( self, op1, op2 ): return op1 + op2 def sub( self, op1, op2 ): return op1 - op2 def mul( self, op1, op2 ): return op1 * op2 def div( self, op1, op2 ): if op1 * op2 < 0: return -((-op1) / op2 ) return op1 / op2 #mapping from op to func operator = { "+": add, "-": sub, "*": mul, "/": div } def evalRPN( self, tokens ): nums = [] for s in tokens: if self.isOp( s ): op2 = nums.pop() op1 = nums.pop() re = self.operator.get( s )(self, op1, op2 ) nums.append( re ) else: nums.append( int( s ) ) return nums[ 0 ]
相关文章推荐
- Evaluate Reverse Polish Notation Leetcode Python
- 【LeetCode with Python】 Evaluate Reverse Polish Notation
- python整除问题-leetcode-Evaluate Reverse Polish Notation
- LeetCode-Evaluate Reverse Polish Notation (Python)
- LeetCode-Evaluate Reverse Polish Notation (Python)
- LeetCode 150 — Evaluate Reverse Polish Notation(C++ Java Python)
- [leetcode]Evaluate Reverse Polish Notation @ Python
- [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
- LeetCode | Evaluate Reverse Polish Notation
- LeetCode - Evaluate Reverse Polish Notation
- [LeetCode]Evaluate Reverse Polish Notation(逆波兰式的计算)
- [LeetCode] Evaluate Reverse Polish Notation, Solution
- leetcode_Evaluate Reverse Polish Notation
- LeetCode:Evaluate Reverse Polish Notation
- [LeetCode] Evaluate Reverse Polish Notation
- Leetcode Evaluate Reverse Polish Notation
- [Leetcode] Evaluate Reverse Polish Notation (Java)
- LeetCode150:Evaluate Reverse Polish Notation
- leetcode-Evaluate Reverse Polish Notation
- [LeetCode] Evaluate Reverse Polish Notation