189. 旋转数组
法1:使用for循环,依次将最后一个弹出,然后插入数组首部
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(k):
lst = nums.pop()
nums.insert(0,lst)
法2:利用切片,找到分割点,进行前后调换。
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
#法2
k = k%len(nums)
nums[:] = nums[len(nums)-k:]+nums[0:len(nums)-k]
法3:反转法
因为题目进阶要求空间复杂度O(1)
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
#法3:三次反转法
k = k%len(nums)
if k != 0:
nums.reverse()
nums[0:k] = nums[k-1::-1]
nums[k::] = nums[-1:-(len(nums)-k+1):-1]
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
#法3:三次反转法
k = k%len(nums)
nums.reverse()
nums[0:k] = list(reversed(nums[:k]))
nums[k::] = list(reversed(nums[k::]))