轮转数组
给定一个整数数组
nums
,将数组中的元素向右轮转k
个位置,其中k
是非负数。
注意:本题需要原地操作
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: None Do not return anything, modify nums in-place instead.
"""
if not nums: return
count = len(nums)
k = k % count
nums[:] = nums[::-1]
nums[:k] = nums[:k][::-1]
nums[k:] = nums[k:][::-1]
本题解题思路是:
以[]1, 2, 3, 4, 5, 6, 7] 3 为例
1. 先整体轮转,将 [1, 2, 3, 4, 5, 6, 7]转为 [7, 6, 5, 4, 3, 2, 1]
2. 再局部分别轮转前k个和剩余的,[5, 6, 7, 1, 2, 3, 4],即为答案
这里要注意,列表的操作:
nums = nums[::-1]
nums = nums[-k:] + nums[:-k]
以及
nums.extend(nums); nums = nums[length - k:-k]
这些写法,nums地址都变了,所以不是原地修改