给定一个数组,将数组中的元素向右移动k个位置,其中k为非负数。
示例:
输入: [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]
方法1:先翻转前n-k个字符,再翻转后k个字符,最后将整个字符串翻转,一共3次翻转。
class Solution:
def rotate(self, nums, k):
l = len(nums)
k %= l
k1 = l - k
if k != 0:
for i in range((k1 - 1) // 2 + 1):
t1 = nums[i]
nums[i] = nums[k1 - 1 - i]
nums[k1 - 1 - i] = t1
for j in range(k1,(k1 + l - 1) // 2 + 1):
t2 = nums[j]
nums[j] = nums[l - 1 + k1 - j]
nums[l - 1 + k1 - j] = t2
nums.reverse()
方法2:采用切片的方式(更简单省时)
class Solution:
def rotate(self, nums, k):
l = len(nums)
k %= l
n = nums[-k:] + nums[:-k]
for i in range(l):
nums[i] = n[i]