尽管 LeetCode 中最终变量的值正确,但输出不正确

Incorrect output despite correct value of final variable in LeetCode

提问人:Hiya 提问时间:7/15/2023 最后编辑:trincotHiya 更新时间:7/15/2023 访问量:36

问:

很抱歉,如果这是一个错误的平台,但我在 LeetCode 上找不到讨论选项卡,所以我认为这可能是最好的平台。

对于 LeetCode 上的下一个排列 (31) 问题,必须更改 nums 列表以反映下一个最大排列。[1,2,3] 至 [1,3,2,2]、[3,2,1] 至 [1,2,3] 和 [1,1,5] 至 [1,5,1] 等。此值不应由函数返回,而应就地更改。

现在,如果我使用 print 语句进行检查,我的代码会给出正确的输出,但由于某种原因,这并不总是正确反映在输出中,而且我无法弄清楚原因。

这是我的代码——

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        def recur(l,n,x):
            a=l[n-x:n]
            maxx=a[0]
            ind=0
            for i in range(1,x):
                if a[i]>maxx:
                    temp=a[i]
                    a[i]=a[ind]
                    a[ind]=temp
                    return l[:n-x]+a
            if x==n-1:
                l.sort()
                return l
            return recur(l,n,x+1)
        nums=recur(nums,len(nums),2)

由于父级(或代码)不包含在 LeetCode 中,因此我假设访问了 nums 变量的最后一个值,这应该可以工作。__main__

有几个类似的问题,显然这个问题与全局变量和静态变量有关,老实说我不明白,所以我认为使用 for 循环而不是递归函数来做可能会消除任何与变量名称相关的问题。但是下面的代码也有同样的问题。

for x in range(2,n):
    a=nums[n-x:n]
    maxx=a[0]
    ind=0
    for i in range(1,x):
        if a[i]>maxx:
            temp=a[i]
            a[i]=a[ind]
            a[ind]=temp
            nums=nums[:n-x]+a
            t=True
            break
        if t:
            break
    else:
        nums.sort()
python-3.x 方法 返回 排列

评论

0赞 trincot 7/15/2023
您的代码就地更改给定列表。它创建新列表,并将它们分配回 ,但这仍然是一个不同的列表。它不会神奇地放弃新创建的列表,而是将所有内容复制到原始列表中。nums
0赞 trincot 7/15/2023
请注意,您遇到的问题远不止于此。即使您忽略此问题,它仍然会产生错误的结果。例如,尝试...那么你的问题是什么?您可以通过赋值而不是赋值来赋值到原始数组,但如上所述,您将无法通过代码质询。[1,3,2]nums[:] = nums =
0赞 Hiya 7/15/2023
@trincot,是的,遇到了这个问题,重新评估了我的逻辑。也明白我没有改变列表,但为什么这是一个问题?使用赋值运算符是否意味着所有内容都应复制到原始列表中?
0赞 trincot 7/15/2023
没有复制。

答: 暂无答案