LeetCode 筆記 - 189. Rotate Array

題目在此 189. Rotate Array

給一個數列,你需要把數列最後面的數字移動到最前面 k 次

解題思維

如果 k == size 或者 size == 1,那就等於沒有做可以直接結束
所以 size 可以先跟 k 取一下 mod (因為 k = length => nothing happen)

接下來的動作就是直接移動 k 個數字到前面了

這題比較特別的地方是不需要回傳結果,而是在原本的記憶體內更改
所以有個特別的寫法是 nums[:]

根據官方文件 淺層 (shallow) 和深層 (deep) 複製操作
我們得知 list[:] 的寫法可以回傳淺層複製的參考

藉此直接更改同一塊記憶體

程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
if k == 0:
return

size = len(nums)
if k == size or size == 1:
return
k %= size

nums[:] = nums[-k:] + nums[:size - k]

也許你也會想看看