簡體   English   中英

為什么有些解決方案適用於 VSCode 而不適用於 LeetCode?

[英]Why some solution works on VSCode but not LeetCode?

我嘗試在 Visual Studio Code 上使用以下解決方案解決這個Leetcode問題:

class CustomStack:
    vals = list()

    def __init__(self, maxSize):
        self.maxSize = maxSize

    def push(self, x):
        if len(self.vals) < self.maxSize:
            self.vals.append(x)
        print(self.vals)

    def pop(self):
        if len(self.vals) > 0:
            val = self.vals.pop()
            print(val)
            return val
        else:
            print(-1)
            return -1

    def increment(self, k, val):
        k = min(k, len(self.vals))
        for i in range(k):
            self.vals[i] += val
        print(self.vals)

它在 VSCode 上打印正確的數字:[null,null,34,null,-1,null,null,63,null,null,null,null]

但它在打印 [null,null,85,null,181,null,null,196,null,null,null,null] 的 LeetCode 上失敗

我知道正確的解決方案可能是這樣的:

class CustomStack:
    def __init__(self, maxSize):
        self.vals =[]
        self.maxSize = maxSize

但是為什么原始版本適用於 VSCode,而不適用於 Leetcode?

在 VS Code 中運行您的程序時,您正在使用CustomStack類的一個實例測試單個示例。 在 LeetCode 中,使用CustomStack類的新實例執行多個測試用例。 由於vars是一個類變量,而不是一個實例變量,它在程序執行期間創建的所有CustomStack實例之間共享。 這意味着每個實例修改相同的list

您已經展示了實現特定於類實例的變量的正確方法是在__init__方法中定義它:

class CustomStack:
    def __init__(self, maxSize):
        self.vals =[]
        self.maxSize = maxSize

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM