任务:
给出了一个由
A
整数组成的数组N
。旋转数组意味着将每个元素右移一个索引,并将数组的最后一个元素移到第一位。例如,数组A = [3, 8, 9, 7, 6]
的旋转为[6, 3, 8, 9, 7]
(元素右移一个索引,而6移到第一位)。
目标是旋转数组A
K
次;也就是说,A
的每个元素将向右移动K
次。
我想知道为什么这个解决方案不起作用?
def solution(A , K):
old = A
new = [0]*len(A)
for i in range(K):
new[0]=old[-1]
new[1:] = old[:-1]
old = new
return new
注意:我已经解决了任务,但是我只是不明白为什么它不起作用。
答案 0 :(得分:1)
问题在于,执行new
时,您只是在old = new
列表中分配了一个新的变量名。因此,您现在对new
所做的任何更改也将反映在old
中,因为您仅创建了指向new
列表相同存储位置的新指针。您应该创建列表的副本,以便不修改原始列表。一种这样做的方法是old = new.copy()
def solution(A , K):
old = A
new = [0]*len(A)
for i in range(K):
new[0]=old[-1]
new[1:] = old[:-1]
old = new.copy() # This was the problematic line
return new
solution([1,2,3,4,5], 2)
# [4, 5, 1, 2, 3]
solution([1,2,3,4,5], 3)
# [3, 4, 5, 1, 2]