LeetCode 189. Rotate Array代码本地可行但平台报错,求排查
LeetCode 189. Rotate Array 代码报错原因及修复
你的代码核心问题是没有真正原地修改输入的nums数组:
- 执行
nums = deque(nums)时,局部变量nums被重新指向了一个新的deque对象,和函数传入的原数组引用彻底断开。 - 后续转成list赋值给
nums,也只是修改了这个局部变量,原数组根本没被改动。LeetCode判题系统会检查传入的原数组内容,自然识别不到你的修改,所以报错。
而本地IDE看起来“正确”,只是因为你打印了这个新的局部变量nums,但原数组其实没变化——你可以在本地试试打印函数外部的原数组,就能发现问题。
修复方案1(保留deque实现)
不用重新赋值nums,而是通过切片替换原数组的内容:
class Solution: def rotate(self, nums: List[int], k: int) -> None: from collections import deque dq = deque(nums) for _ in range(k): dq.appendleft(dq.pop()) # 原地修改原数组的全部内容 nums[:] = list(dq)
修复方案2(更高效的切片实现)
不需要额外数据结构,直接用Python数组切片原地修改,还能处理k大于数组长度的情况:
class Solution: def rotate(self, nums: List[int], k: int) -> None: n = len(nums) k = k % n # 取模避免重复旋转 nums[:] = nums[-k:] + nums[:-k]
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

