给定一个 n x n 矩阵,交换两个正方形中的元素。
F.e.你得到:
0 3 1 2
9 2 3 4
5 6 5 7
7 8 9 9
您需要返回:
0 3 5 6
9 2 7 8
1 2 5 7
3 4 9 9
我发现这个函数有两种变体,具体取决于矩阵大小:n 是偶数还是非均匀。 我试图用两个循环来解决这个任务,但我知道我只是交换元素(它是偶数大小的变体):
def Swap4(m,r):
k = r//2
if r % 2 != 0:
for i in range(0, k):
for j in range(k+1, r):
t = m[i][j]
m[i][j] = m[j][i]
m[j][i] = t
else:
for i in range(0, k):
for j in range(k, r):
t = m[i][j]
m[i][j] = m[j][i]
m[j][i] = t
这里 k 是矩阵大小 n // 2。 然而,在我看来,当我们像这样交换元素时,我们需要在 i 循环中对索引进行某种转换:
[0][2] -> [2][0]
[0][3] -> [2][1]
[1][2] -> [3][0]
[1][3] -> [3][1]
你根本不需要循环。
如果矩阵的大小为 NxN,您始终可以将
mat[0][N-1]
与 mat[N-1][0]
交换
即
def swap_matrix(mat):
# Assumes matrix is of size N x N
n = len(mat)
# Swap the last element of the first row with the first element of the last row
mat[0][n-1], mat[n-1][0] = mat[n-1][0], mat[0][n-1]
return mat