【发布时间】:2022-01-22 14:10:16
【问题描述】:
将给定数组中的项目移动一定次数,如下例所示;
array = [1, 2 ,3 , 4, 5, 6]
k1 = 2
k2 = -3
k3 = 20
test1:
cirShift(array, k1)
Result: [5, 6, 1, 2, 3, 4]
test2:
cirShift(array, k2)
Result: [4, 5, 6, 1, 2, 3]
test3:
cirShift(array, k3)
Result: [5, 6, 1, 2, 3, 4]
我已经使用下面的方法实现了k位置的右旋转列表;
def rightRotateByOne(A):
Fin= A[-1]
for i in reversed(range(len(A) - 1)):
A[i + 1] = A[i]
A[0] = Fin
def rightRotate(A, k):
if k < 0 or k >= len(A):
return
for i in range(k):
rightRotateByOne(A)
if __name__ == '__main__':
A = [1, 2, 3, 4, 5, 6, 7]
k = 3
rightRotate(A, k)
print(A)
截至目前,能够获得test1的结果,但想实现test2和test3
【问题讨论】:
-
rightRotate(A, k)应该产生与rightRotate(A, k % len(A))相同的输出。您可以在# base case: invalid input行之前添加k %= len(A)。 -
其实上面的评论已经解决了test2和test3
-
这能回答你的问题吗? Python list rotation