每日一题力扣189数组的旋转 取模这个想法好棒!

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

正解:

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        t=len(nums)
        k=k % t#取模是最棒的想法!
        nums[:]=nums[::-1]
        nums[:k]=nums[:k][::-1]
        nums[k:]=nums[k:][::-1]
        return nums
class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n=len(nums)#设nums=[1,2,3,4,5,6,7],k=3,应得[5,6,7,1,2,3,4]
        k=k%n
        def turn(x,y):
            while(x<y):
                nums[x],nums[y]=nums[y],nums[x]
                x+=1
                y-=1
        turn(0,n-k-1)#将第一段反转,即1234反转成4321
        turn(n-k,n-1)#将第二段反转,即567变成765
        turn(0,n-1)#全部反转,即4321765变成5671234
        return nums
原文地址:https://www.cnblogs.com/liuxiangyan/p/14460772.html