題目描述:
給定一個整數數組?nums
,將數組中的元素向右輪轉?k
?個位置,其中?k
?是非負數。
?
示例 1:
輸入: nums = [1,2,3,4,5,6,7], k = 3 輸出:[5,6,7,1,2,3,4]
解釋: 向右輪轉 1 步:[7,1,2,3,4,5,6]
向右輪轉 2 步:[6,7,1,2,3,4,5]
向右輪轉 3 步:[5,6,7,1,2,3,4]
示例?2:
輸入:nums = [-1,-100,3,99], k = 2 輸出:[3,99,-1,-100] 解釋: 向右輪轉 1 步: [99,-1,-100,3] 向右輪轉 2 步: [3,99,-1,-100]
?
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105
?
我的作答:
切片,再替換
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."""if not nums: return []if k>len(nums):k = k%len(nums) #因為輪轉是周期性的left = nums[len(nums)-k:len(nums)]right = nums[0:len(nums)-k]nums[:] = left+rightreturn nums
?
參考:
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."""def reverse(i, j):while i < j:nums[i], nums[j] = nums[j], nums[i]i += 1j -= 1n = len(nums)k %= n # 輪轉 k 次等于輪轉 k%n 次reverse(0, n - 1)reverse(0, k - 1)reverse(k, n - 1)
?