Medium
Related Topics: Array / Math / Two Pointers
LeetCode Source
這裡初始化 l
是 nums
的長度
蠻直觀的解法,直接在 l - k
的地方把 nums
切開,之後將後半部放到前面
不過要注意的一點是,有時候 k
會大於 l
,所以記得 k = k % l
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
l = len(nums)
k = k % l
nums[:] = nums[l-k:] + nums[:l-k]
return
Python 解法有點簡單,所以自己建議是多用其他語言解題
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int l = nums.size();
k = k % l;
vector<int> temp(nums.begin() + l - k, nums.end());
temp.insert(temp.end(), nums.begin(), nums.begin() + l - k);
nums = temp;
}
};
這解法不是 in-place 解,我在這多宣告一個 temp
來放 nums
的後半部
後面用 insert
將原先 nums
的前半部放在 temp
的後面,最後 temp
取代 nums
有鑑於 C++ 解法並非 in-place,所以有另一種解法,用 reverse()
做法是 reverse()
三次,後面兩步可以交換順序執行
nums
k
個l - k
個class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: None Do not return anything, modify nums in-place instead.
"""
k = k % len(nums)
nums.reverse()
nums[k:] = reversed(nums[k:])
nums[:k] = reversed(nums[:k])
nums.reverse()
反轉整個 list
而透過 reversed(nums[k:])
反轉 index k
到 l
的 listreversed(nums[:k])
反轉 index 0
到 k - 1
的 list
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k = k % nums.size();
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin() + k);
reverse(nums.begin() + k, nums.end());
}
};