给你一个数组,将数组中的元素向右轮转 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]
最简单的编程方法是
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
length = len(nums)
c = length-(k)%length
nums[:] = nums[c:]+nums[0:c]
其中注意点在于
nums[:]
必须使用[:]
,否则不会在原有地址上改变数值- 对k关于数组长度取余是为了避免不必要的计算
- 移动的长度是
length-(k)
题目中还要求多使用一些方法编程
还可以使用基础的交换
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
length = len(nums)
k = k % length
new_nums = nums.copy()
for l in range(length):
if l+k < length:
nums[l+k] = new_nums[l]
else:
nums[l+k-length] = new_nums[l]
还有比较有趣的数组翻转:
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
length = len(nums)
k = k % length
c = length-k
nums.reverse()
nums[:k] = nums[:k][::-1]
nums[k:] = nums[k:][::-1]