题目描述:
题解一:
采用翻转的方法,参考编程珠玑第二章读书笔记_ganggang的博客-CSDN博客 其中2.3基本操作的威力
以示例1为例,nums = [1,2,3,4,5,6,7] k=3
<1>对nums[0:len(nums)-k]部分即nums[0:4]进行翻转1 2 3 4->4 3 2 1
<2>对nums[len(nums)-k:]部分进行翻转5 6 7->7 6 5
<3>对前两步处理之后的nums[0:]进行翻转,4 3 2 1 7 6 5->5 6 7 1 2 3 4
其中需要注意,如果移动位置k>len(nums),用k除以len(nums)取余。
class Solution(object): def rotate(self, nums, k): length = len(nums) nums[0:length-k] = list(reversed(nums[0:length-k])) nums[length-k:] = list(reversed(nums[length-k:])) nums = list(reversed(nums)) return nums
题解二:需要额外空间
把原数组nums看作两部分,交换两部分的位置。
class Solution(object): def rotate(self, nums, k): length = len(nums) k = k%length nums1 = nums[0:length-k] nums2 = nums[length-k:] nums[0:k] = nums2 nums[k:] = nums1 return nums