我正在尝试在 Leetcode 上练习我的 Python。问题是189。旋转阵列。虽然在其他IDE中可以正常运行,但在Leetcode中仍然错误。这是我的代码:
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
from collections import deque
nums = deque(nums)
for i in range(k):
nums.appendleft(nums.pop())
nums = list(nums)
print(nums)
还是不知道。我的代码有什么问题?
list(nums)
和 deque(nums)
将创建一个完全不同的列表对象,因此不认为它是就地替换列表。我认为您必须对索引 i
处的列表使用通用赋值语句(即 nums[i] = <value>
)。下面的代码是使用递归 dfs 和就地列表修改的方法之一
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
k = k % len(nums)
def traverse(nums, i, k, value, count, origin):
next_i = (i + k) % len(nums)
if next_i != origin and count < len(nums):
count = traverse(nums, next_i, k, nums[i], count + 1, origin)
nums[i] = value
return count
count = 0
offset = 0
while count < len(nums):
count = traverse(nums, k + offset, k, nums[offset], count + 1, offset + k)
offset += 1
return nums