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());
}
};