将包含 n 个元素的数组向右旋转 k 步。
例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7]
,向右旋转后的结果为 [5,6,7,1,2,3,4]
。
注意:
尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。
提示:
要求空间复杂度为 O(1)
解题思路: 先把前n-k个数对调顺序,再把后k个数对调顺序,然后把整个数组对调顺序,是不是很神奇!
解题代码:
def reverse(start,end,s):
while start<end:
s[start],s[end]=s[end],s[start]
start+=1
end-=1
k=k % len(nums)
reverse(0,len(nums)-1-k,nums)
reverse(len(nums)-k,len(nums)-1,nums)
reverse(0,len(nums)-1,nums)