给定一个整数数组 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]
解题思路:
这个问题可以通过使用 Python 的切片和列表反转来解决。首先,我们需要将数组向右旋转 k 个位置,然后再将整个数组反转。这样就可以得到旋转后的数组。
Python 代码实现如下:
def rotate(nums, k):
# 先将整个数组反转
nums.reverse()
# 将 k 取模,防止 k 大于数组长度
k = k % len(nums)
# 反转前 k 个元素,然后再反转后几个元素,这样整个数组就旋转了 k 个位置
nums[:k], nums[k:] = nums[len(nums)-k:], nums[:len(nums)-k]
return nums
代码注释:
reverse()
是 Python 列表的一个方法,用于反转列表中的元素。k % len(nums)
是为了防止 k 的值大于数组的长度。在 Python 中,如果一个正数 a 大于一个负数 b,那么 a % b 的结果将是一个正数。因此,如果我们希望 k 的值始终为非负数,那么在 k 大于数组长度的情况下,我们应该将其取模。nums[:k]
和 nums[len(nums)-k:]
是 Python 列表的切片操作。这表示分别取数组的前 k 个元素和最后 k 个元素。nums[:len(nums)-k]
和 nums[len(nums)-k:]
是交换两个切片操作的结果,这样就可以实现数组的旋转。原本在前面的 k 个元素被移动到了后面,原本在后面的元素被移动到了前面。