-
Notifications
You must be signed in to change notification settings - Fork 4
/
1572.Matrix_Diagonal_Sum.js
53 lines (53 loc) · 1.17 KB
/
1572.Matrix_Diagonal_Sum.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* @param {number[][]} mat
* @return {number}
*/
var diagonalSum = function (mat) {
/**
* 主对角线和副对角线元素满足什么条件?
* 主对角线:行、列坐标相等
* 副对角线:行、列坐标相加等于正方形矩形长度
* 计算规则有什么区别?
* 偶数:直接相加即可
* 奇数:行、列坐标为 (mat.length - 1)/2, (mat.length - 1)/2的只加一次
*/
// 第一版
let i = 0;
let duplicate = 0;
let sum = 0;
while (i < mat.length) {
let j = 0;
while (j < mat[i].length) {
if (i === j || i + j === mat.length - 1) {
sum += mat[i][j];
}
if (i === (mat.length - 1) / 2 && j === (mat.length - 1) / 2) {
duplicate = mat[i][j];
}
j++;
}
i++;
}
if (mat.length / 2 === 1) {
sum -= duplicate;
}
return sum;
// 优化版
let i = 0;
let sum = 0;
const tail = mat.length - 1;
while (i < mat.length) {
let j = 0;
while (j < mat[i].length) {
if (i === j || i + j === tail) {
sum += mat[i][j];
}
j++;
}
i++;
}
if (mat.length / 2 === 1) {
sum -= mat[tail / 2][tail / 2];
}
return sum;
};