首页 > 解决方案 > 为什么 leetcode 产生的结果与 pycharm 和 jupyter-notebook 不同?

问题描述

这听起来很奇怪,但我复制粘贴并使用相同的输入方法,我在我的机器上得到了正确的结果,但 leetcode 为相同的代码产生了不同的结果。这是 Q-377 的 leetcode 上的代码:

class Solution:
    def combinationSum4(self, nums: List[int], target: int,memo={}) -> int:
       
        if target in memo:
            return memo[target]
        
        if target==0:
            return 1
        if target<0:
            return 0 
        count=0
        for num in nums: 
            remainder=target-num
            count+=self.combinationSum4(nums,remainder)
        
        memo[target]=count
        return count

这是我为 nums=[9] target=3 得到的结果

在此处输入图像描述

这是 jupyter 和 pycharm 的结果。相同的代码。我从leetcode复制:

在此处输入图像描述

这个pycahrm在此处输入图像描述

我也试过这个解决方案有同样的问题:

在此处输入图像描述

标签: pythonpython-3.x

解决方案


Leetcode 中的问题没有论据memo = {}。这是来自 LC 代码。

def combinationSum4(self, nums: List[int], target: int) -> int:

由于您正在更改函数参数,因此它仅适用于 PyCharm 或 Jupyter。但是 Leetcode 只会传递所需的参数,即numsandtargetnot memo = {}您需要以 LC 的方式编写代码。

如果您打算更改函数的参数。您可以使用所需的参数编写单独的函数,并从combinationSum4()函数内调用它。

这是代码:

class Solution:
    def solve(self, nums, target, memo):
            if target in memo:
                return memo[target]

            if target==0:
                return 1
            if target<0:
                return 0 
            count=0
            for num in nums: 
                remainder=target-num
                count += self.solve(nums,remainder,memo)

            memo[target]=count
            return count
    
    def combinationSum4(self, nums: List[int], target: int) -> int:
        # Calling the function
        return self.solve(nums, target, {})

推荐阅读