问题描述
小U拿到一个大小为 n × n 的矩阵。她需要计算该矩阵的转置权值。转置权值的定义如下:
- 将矩阵进行转置操作,转置后的矩阵中的元素
b[i][j]与原矩阵中的元素a[j][i]互换位置。 - 对于每个位置
(i, j),计算原矩阵的元素与转置矩阵对应位置元素的差的绝对值。 - 最后,将所有差的绝对值累加起来,得出转置权值。
测试样例
样例1:
输入:
n = 2, a = [[1, 2], [3, 4]]
输出:2
样例2:
输入:
n = 3, a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
输出:16
样例3:
输入:
n = 4, a = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]
输出:20
问题理解
你需要计算一个 n × n 矩阵的转置权值。转置权值的定义如下:
- 转置操作:将矩阵的行和列互换,即原矩阵中的元素
a[i][j]变为转置矩阵中的元素b[j][i]。 - 差的绝对值:对于每个位置
(i, j),计算原矩阵a中的元素与转置矩阵b中对应位置元素的差的绝对值。 - 累加:将所有差的绝对值累加起来,得到转置权值。
思路分析
- 创建一个大小为
n × n的二维列表(矩阵)b,并将其所有元素初始化为0。
b = [[0] * n for _ in range(n)]
- 计算原矩阵与转置矩阵对应位置元素的差的绝对值并存放到矩阵
b对应位置。
在 Python 中,你可以使用
abs()函数来计算两个数的差的绝对值.
for i in range(n):
for j in range(n):
b[i][j]=abs(a[i][j]-a[j][i])
- 将矩阵
b中所有元素加起来就能够得到转置权值。
python代码展示
def solution(n: int, a: list) -> int:
sum=0
b = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n):
b[i][j]=abs(a[i][j]-a[j][i])
sum+=b[i][j]
return sum
示例分析
样例:
输入:
n = 2, a = [[1, 2], [3, 4]]
输出:2
-
转置矩阵:
- 原矩阵
a是:[ [1, 2],[3, 4] ] - 转置矩阵
a'应该是:[ [1, 3],[2, 4] ]
- 原矩阵
-
计算差的绝对值并累加:
-
计算每个位置
(i, j)上a[i][j]和a'[i][j]的差的绝对值|a[0][0] - a'[0][0]| = |1 - 1| = 0
|a[0][1] - a'[0][1]| = |2 - 3| = 1
|a[1][0] - a'[1][0]| = |3 - 2| = 1
|a[1][1] - a'[1][1]| = |4 - 4| = 0
-
将所有差的绝对值累加起来:0 + 1 + 1 + 0 = 2
-
结论
我们需要了解什么矩阵转置,矩阵转置是怎样完成的;掌握python中基础函数知识,知道在 Python 中,可以使用 abs() 函数来计算两个数的差的绝对值。