我使用python语言写的,主要有两种方法。
1.先将整个数组反转,在分别反转前k个和后k个,思路很简单。
2.第2种方法是利用python中对list的一些操作,将list分片后再重新组合
两种方法的代码如下:注释中也谢了思路
class Solution(object):
def rotate_1(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: None Do not return anything, modify nums in-place instead. """
# 若输入的k不符合范围,则.....
k = k % len(nums)# 保证循环次数在0-len(nums)之
nums[:] = nums[len(nums)-k:] + nums[:len(nums)-k]# 切割成两块重新组合,再拼接起来
def rotate_2(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)# 必须加一个语句,使k符合规定的范围
self.reverse(nums, 0, len(nums)-1)# 先整个反转
self.reverse(nums, 0, k-1)# 反转前k部分
self.reverse(nums, k, len(nums)-1)# 反转后k部分
def reverse(self, nums, l, r):
while l < r:
t = nums[l]
nums[l] = nums[r]
nums[r] = t
l = l+1
r = r-1