Skip to content

Latest commit

 

History

History
69 lines (61 loc) · 1.34 KB

189.-rotate-array.md

File metadata and controls

69 lines (61 loc) · 1.34 KB

189. Rotate Array

{% tabs %} {% tab title="Go" %}

func rotate(nums []int, k int)  {
    k =k%len(nums)
    if k == 0 {
        return 
    }
    var step, idx int
    temp := nums[0]
    for step < len(nums) {
        target_idx := (idx + k)%len(nums)
        // 分类讨论,取模后的idx 是否是同一个环 
        for target_idx != idx {
            temp , nums[target_idx] = nums[target_idx],temp
            target_idx = (target_idx + k)%len(nums)
            step ++ 
        } 
        idx ++
        temp , nums[target_idx] = nums[idx],temp
        step ++ 
        
    }
}

{% endtab %}

{% tab title="Go-recursive" %}

//还是reverse 好写
func rotate(nums []int, k int)  {
    k =k%len(nums)
    if k == 0 {
        return 
    }
    reverse(nums,0,len(nums)-1)
    reverse(nums,0,k-1)
    reverse(nums,k,len(nums)-1)
}

func reverse(nums []int, l int, r int) {
    for l <= r {
        nums[l],nums[r] = nums[r],nums[l]
        l++
        r--
    }
}

{% endtab %}

{% tab title="Python" %}

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        while k > len(nums):
            k -= len(nums)
        nums[:] = nums[-k:]+nums[:-k]
## 有事觉得python slice 太方便了.

{% endtab %} {% endtabs %}