我有一个问题,涉及到采取一个方阵的列表形式,并找到的绝对值之间的差异主对角线和次对角线。例如,给定以下列表:
test_matrix = [[11, 2, 4], [4, 5, 6], [10, 8, -12]]
返回正确的解决方案
15
我的解决方案是:
def diagonalDifference(test_matrix):
primary_diag = 0
secondary_diag = 0
for i, row in enumerate(test_matrix):
for j, val in enumerate(row):
if (i == j) and ((i + j) == len(test_matrix) - 1):
secondary_diag += val
primary_diag += val
elif i == j:
primary_diag += val
elif (i + j) == len(test_matrix) - 1:
print('secondary_diag:' + str(val))
secondary_diag += val
return abs(primary_diag - secondary_diag)
这个方法很好用,但是我希望有人能告诉我是否有一种方法可以只用一个for循环来重现这个解决方案,任何其他的改进也是受欢迎的。
2条答案
按热度按时间sr4lhrrt1#
既然你已经有了一个核心的Python解决方案,那么让我提供一个基于数值的解决方案,它对于大型矩阵可能会更快:
vngu2lb82#
通过简单地迭代可能的行索引并使用它们来计算行索引和列索引以索引(平方)输入数据,可以在O(N)中解决潜在的问题: