leetcode-189-旋转数组
题目描述:
方法一:
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): temp = nums[-1] del nums[-1] nums.insert(0,temp)
另:
k=k%len(nums) for i in range(k): nums.insert(0,nums.pop())
方法二;
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ k=k%len(nums) t=nums[-k:] nums[k:]=nums[:-k] nums[:k]=t
方法三:
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ n=len(nums) k=k%n self.reverse(nums,0,n-1) self.reverse(nums,0,k-1) self.reverse(nums,k,n-1) def reverse(self,nums,start,end): while start<end: nums[start],nums[end]=nums[end],nums[start] start+=1 end-=1
方法四:环状替代
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ k=k%len(nums) count = 0 for start in range(len(nums)): if count<len(nums): current=start prev = nums[start] while True: next = (current+k)%len(nums) temp = nums[next] nums[next] = prev prev=temp current = next count+=1 if start==current: break