我一直在解决一个编码面试问题,看起来像这样:
给定一个字符数组 A 和一个整数数组 P,其中 P[i] 表示排列中第 i 个元素的位置。例如,当 A = <a, b, c, d>
且 P = <2, 0, 1, 3>
时,A 应该变为 <b, c, a, d>
我的解决方案如下:
for i in range(len(A)):
while perm[i] != i:
A[i], A[perm[i]] = A[perm[i]], A[i]
perm[i], perm[perm[i]] = perm[perm[i]], perm[i]
这个代码会陷入无限循环,而下面的代码则正常工作。
for i in range(len(A)):
while perm[i] != i:
A[perm[i]], A[i] = A[i], A[perm[i]]
perm[perm[i]], perm[i] = perm[i], perm[perm[i]]
我一直以为在 Python 中,交换变量的快捷方式中的顺序并不重要,但是我很困惑为什么上面那个不起作用而下面那个却可以。
有什么想法吗?