当我做 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。
tokens = ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
谁能指出我做错了什么?
问题出在整数除法上。在 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 上的运行结果保持一致。