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

 

posted @ 2019-07-20 14:30  oldby  阅读(178)  评论(0编辑  收藏  举报