题目链接(简单)
解法 | 执行用时 |
---|---|
Ans 1 (Python) | 36ms (>92.52%) |
Ans 2 (Python) | 44ms (>65.04%) |
Ans 3 (Python) | 40ms (>81.61%) |
解法一(直接的列表操作):
def rotate(self, nums: List[int], k: int) -> None:
k %= len(nums) # 处理k超过列表长度的情况
nums[:] = nums[-k:] + nums[:-k]
解法二(使用切片器的三次反转):
1 2 3 4 5 6 7
4 3 2 1 5 6 7 反转前4项
4 3 2 1 7 6 5 反转后3项
5 6 7 1 2 3 4 反转所有项
def rotate(self, nums: List[int], k: int) -> None:
k %= len(nums) # 处理k超过列表长度的情况
nums[-k:] = nums[-k:][::-1]
nums[:-k] = nums[:-k][::-1]
nums[:] = nums[::-1]
解法三(不使用切片器的三次反转):
def reverse(self, nums: List[int], start, end):
while start < end:
temp = nums[end]
nums[end] = nums[start]
nums[start] = temp
start += 1
end -= 1
def rotate(self, nums: List[int], k: int) -> None:
l = len(nums)
k %= l # 处理k超过列表长度的情况
self.reverse(nums, 0, l - k - 1)
self.reverse(nums, l - k, l - 1)
self.reverse(nums, 0, l - 1)