矩阵转置
约 8 分钟
转置就是把行和列对调:原来第 行第 列的数 a[i][j],搬到结果的第 行第 列。一个 行 列的矩阵,转置后变成 行 列。
用一个新数组接住最稳妥:
int a[105][105], b[105][105], r, c;
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
b[j][i] = a[i][j]; // 行列互换
// 方阵想原地转置:只走上三角
int n;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
swap(a[i][j], a[j][i]);
遍历每个元素一次,复杂度 。两个坑要记牢:其一,非方阵不能"原地"转置,因为形状都变了,必须开新数组 b[c][r];其二,方阵想省内存做原地转置时,内层循环要写 从 开始——如果 从 0 开始,每对元素会被交换两次,等于换回原样,白忙一场。对角线元素 自己不用换。
小纸条
3×2 的矩阵转置后是几行几列?
登录 后可看答案