题目链接 简述: 输入一个数组nums, 整数k, 将数组向右轮转k个位置.
python:
class Solution(object):
def rotate(self, nums, k):
l = len(nums)
if k>l:
k = k%l
nums[:] = nums[l-k:] + nums[:l-k]
解析:
-
nums[:]
参考<Python学习手册>, 采取
list =方式给列表赋值, 并不是修改list本身, 而是修改list指针指向的内存地址, 并不符合题目要求的在原处修改数组. -
nums[l-k:] + nums[:l-k]
思想: 向右轮转k个位置, 在草稿本上简单演算可证明出就是将右侧k个元素切片放到左侧. 注意: python中的切片是左闭右开区间.
-
if语句
考虑到k可能大于列表长度, 所以操作存在周期性: 即次数等于列表长度整数倍的操作相当于没操作, 列表没有被改变, 于是采用取余法, 将周期剔除, 留下余数步骤, 才是真正有用(有影响的)轮转步骤.