【leetcode】:Evaluate Reverse Polish Notation (python)

逆波兰式的求解,建立一个类栈容器,遍历给定的逆波兰表达式,遇到数字就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中的处理更符合数学的美感,(姑且这么讲吧)

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 ]

【leetcode】:Evaluate Reverse Polish Notation (python),布布扣,bubuko.com

时间: 2024-10-12 19:07:18

【leetcode】:Evaluate Reverse Polish Notation (python)的相关文章

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", "*"] -&g

【leetcode】Evaluate Reverse Polish Notation(middle)

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", "*"] -&g

Leetcode 之Evaluate Reverse Polish Notation(41)

很简单的一道题,定义一个栈保留操作数,遇操作符则弹出运算即可. bool isOperator(string &op) { //注意用法 return op.size() == 1 && string("+-*/").find(op) != string::npos; } int evalRPN(vector<string> &tokens) { stack<string> s; for (auto token : tokens)

LeetCode: Reverse Words in a String:Evaluate Reverse Polish Notation

LeetCode: Reverse Words in a String: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&q

LeetCode第一题:Evaluate Reverse Polish Notation

时间:2014.06.11 地点:基地 -------------------------------------------------------------------- 一.题目 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, *, /. Each operand may be an integer or another express

【leetcode】Max Points on a Line (python)

给定一个点,除该点之外的其他所有点中,与该点的关系要么是共线,要么就是共点,也就是两点重合. 共线有三种情况:水平共线,垂直共线,倾斜的共线.合并下这三种情况就是斜率存在的共线和斜率不存在的共线. 那么我们的任务就是针对每个点,找出与其共线的这些情况中,共线最多的点的个数. 注意:最终的结果别忘了加上共点的个数. class Solution: def maxPoints(self, points ): if len( points ) <= 1: return len( points ) ma

【leetcode】Pascal&#39;s Triangle I &amp; II (middle)

Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 思路:杨辉三角,直接按规律生成即可 vector<vector<int> > generate(int numRows) { vector<vector<int>>

【LeetCode刷题Java版】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", "*"] -&g

Leetcode 448. 150. Evaluate Reverse Polish Notation JAVA语言

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", "*"] -