小能豆

相同的 Python 代码在 Leetcode 中返回不同的答案

python

当我做 Leetcode 问题时,我在 PC 上的 PyCharm 中编写代码,当它运行时,我将其复制粘贴到 Leetcode 中。

这是我写的代码。

def main():
    # tokens = ["2", "1", "+", "3", "*"]
    # tokens = ["4", "13", "5", "/", "+"]
    tokens = ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
    print(eval_rpn(tokens))


def eval_rpn(tokens):
    stack = []
    ops = ["+", "-", "*", "/"]

    for c in tokens:
        if c not in ops:
            stack.append(c)
        else:
            num2 = int(stack.pop())
            num1 = int(stack.pop())

            if c == "+":
                total = num1 + num2
            elif c == "-":
                total = num1 - num2
            elif c == "*":
                total = num1 * num2
            else:  # The only operator left is division
                total = num1 / num2

            stack.append(total)

    return stack[-1]


if __name__ == "__main__":
    main()

这是我在 Leetcode 中粘贴并提交的代码。

class Solution(object):
    def evalRPN(self, tokens):
        stack = []
        ops = ["+", "-", "*", "/"]

        for c in tokens:
            if c not in ops:
                stack.append(c)
            else:
                num2 = int(stack.pop())
                num1 = int(stack.pop())

                if c == "+":
                    total = num1 + num2
                elif c == "-":
                    total = num1 - num2
                elif c == "*":
                    total = num1 * num2
                else:
                    total = num1 / num2

                stack.append(total)

        return stack[-1]

但由于某种原因,输入tokens = ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]Leetcode 返回 12。当我在 PC 上运行相同的代码时,它返回 22。22 是预期的输出。不是12。

谁能指出我做错了什么?


阅读 151

收藏
2023-07-25

共1个答案

小能豆

问题出在整数除法上。在 Python 2 中,整数除法会向下取整,而在 Python 3 中,整数除法会得到浮点数结果。

在你的本地 PC 上运行代码时,很可能是使用的是 Python 3,因此得到的结果是正确的。而在 Leetcode 上运行代码时,可能是使用的是 Python 2,导致结果不同。

解决这个问题的方法是,在进行除法操作时,将结果强制转换为整数。这样可以确保在 Python 2 和 Python 3 中得到一致的结果。

修改代码如下:

class Solution(object):
    def evalRPN(self, tokens):
        stack = []
        ops = ["+", "-", "*", "/"]

        for c in tokens:
            if c not in ops:
                stack.append(c)
            else:
                num2 = int(stack.pop())
                num1 = int(stack.pop())

                if c == "+":
                    total = num1 + num2
                elif c == "-":
                    total = num1 - num2
                elif c == "*":
                    total = num1 * num2
                else:
                    total = int(num1 / num2)  # Force division result to be an integer

                stack.append(total)

        return stack[-1]

通过强制将除法的结果转换为整数,你可以在 Leetcode 上得到正确的结果,也与本地 PC 上的运行结果保持一致。

2023-07-25