首页 > 编程语言 > 详细

[leetcode]Evaluate Reverse Polish Notation @ Python

时间:2014-06-03 11:15:09      阅读:473      评论:0      收藏:0      [点我收藏+]

原题地址:https://oj.leetcode.com/problems/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", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

解题思路:这道题是经典的逆波兰式求值。具体思路是:开辟一个空栈,遇到数字压栈,遇到运算符弹出栈中的两个数进行运算,并将运算结果压栈,最后栈中只剩下一个数时,就是所求结果。这里需要注意的一点是python中的‘/‘除法和c语言不太一样。在python中,(-1)/2=-1,而在c语言中,(-1)/2=0。也就是c语言中,除法是向零取整,即舍弃小数点后的数。而在python中,是向下取整的。而这道题的oj是默认的c语言中的语法,所以需要在遇到‘/‘的时候注意一下。

代码:

bubuko.com,布布扣
class Solution:
    # @param tokens, a list of string
    # @return an integer
    def evalRPN(self, tokens):
        stack = []
        for i in range(0,len(tokens)):
            if tokens[i] != + and tokens[i] != - and tokens[i] != * and tokens[i] != /:
                stack.append(int(tokens[i]))
            else:
                a = stack.pop()
                b = stack.pop()
                if tokens[i] == +:
                    stack.append(a+b)
                if tokens[i] == -:
                    stack.append(b-a)
                if tokens[i] == *:
                    stack.append(a*b)
                if tokens[i] == /:
                    if a*b < 0:
                        stack.append(-((-b)/a))
                    else:
                        stack.append(b/a)
        return stack.pop()
bubuko.com,布布扣

 

[leetcode]Evaluate Reverse Polish Notation @ Python,布布扣,bubuko.com

[leetcode]Evaluate Reverse Polish Notation @ Python

原文:http://www.cnblogs.com/zuoyuan/p/3760530.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!