面试题答案
一键面试实现思路
- 首先获取矩阵的行数和列数,矩阵的行数和列数决定了对角线的长度。
- 初始化两个变量,分别用于存储主对角线和副对角线元素的和。
- 使用循环遍历矩阵,对于主对角线,其元素满足行索引和列索引相等(即
matrix[i][i]
);对于副对角线,其元素满足行索引和列索引之和等于矩阵边长减 1(即matrix[i][matrix.length - 1 - i]
)。 - 在遍历过程中,判断矩阵的行数和列数是否相等。如果相等,直接累加对角线元素;如果不相等,需要根据较短对角线的长度来进行累加,避免数组越界。
- 最后返回主对角线和副对角线元素之和。
处理多维数组时需要注意的要点
- 边界检查:在访问多维数组元素时,要确保索引不越界。例如,在访问
matrix[i][j]
时,i
必须在0
到matrix.length - 1
之间,j
必须在0
到matrix[i].length - 1
之间。 - 数组长度一致性:对于矩阵(二维数组),虽然理论上每行长度可以不同,但如果按对角线处理,最好确保每行长度一致,否则需要额外处理逻辑。
- 嵌套循环遍历:通常使用嵌套循环来遍历多维数组,外层循环控制行,内层循环控制列。注意循环变量的范围和更新。
代码实现
public class DiagonalSum {
public static int diagonalSum(int[][] matrix) {
int sum = 0;
int minLength = Math.min(matrix.length, matrix[0].length);
for (int i = 0; i < minLength; i++) {
sum += matrix[i][i];
sum += matrix[i][matrix.length - 1 - i];
}
// 如果矩阵是奇数边长,减去中间重复计算的元素
if (matrix.length % 2 != 0) {
sum -= matrix[matrix.length / 2][matrix.length / 2];
}
return sum;
}
}
你可以使用以下方式调用这个方法:
public class Main {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int result = DiagonalSum.diagonalSum(matrix);
System.out.println("对角线元素之和: " + result);
}
}