# Matrix Diagonal Sum 題目描述: 給定一個矩陣 mat,請計算它的對角線元素的和。 說明: 1. 矩陣的對角線是從左上到右下的一條直線。 1. 輸入矩陣的行數和列數不超過100。 1. 輸入矩陣中的整數在(-2^31, 2^31 - 1)範圍內。 解題思路: 1. 遍歷矩陣,並計算主對角線和副對角線上的元素的和。 1. 如果矩陣的行數和列數是奇數,那麼它的中心元素會被計算兩次,因此需要減去一次。 1. 返回主對角線和副對角線上元素的總和。 ```c++= class Solution { public: int diagonalSum(vector<vector<int>>& mat) { //正對角線[0][0], [1][1], [2][2], ..., [i][i] //逆對角線[0][n-1-0], [1][n-1-1], ..., [i][n-1-i]; //中心點如果n為奇數會重複計算 int sum = 0; int n = mat.size(); for(int i = 0; i < mat.size(); i++){ sum += mat[i][i] + mat[i][n-1-i]; } if((n % 2) == 1){ //利用%求餘判斷是否是奇數matrix sum -= mat[n/2][n/2]; } return sum; } }; ``` ```C++= class Solution { public: int diagonalSum(vector<vector<int>>& mat) { //正對角線[0][0], [1][1], [2][2], ..., [i][i] //逆對角線[0][n-1-0], [1][n-1-1], ..., [i][n-1-i]; //中心點如果n為奇數會重複計算 int sum = 0; // 初始對角線和為0 int n = mat.size(); // n為matrix的大小,由於matrix是正方形,可以只取其中一個維度的大小 for(int i = 0; i < mat.size(); i++){ // 遍歷matrix中每一列 sum += mat[i][i] + mat[i][n-1-i]; // 將正對角線和逆對角線的值加總 } if((n % 2) == 1){ // 如果matrix的大小是奇數 sum -= mat[n/2][n/2]; // 減去中心點的值,中心點會被重複計算 } return sum; // 回傳對角線和 } }; ``` ###### tags: `array` ```javascript= /** * @param {number[][]} mat * @return {number} */ var diagonalSum = function(mat) { let m = mat.length; let sum = 0; for(let i = 0; i < m; i++){ sum += mat[i][i]; sum += mat[i][m-i-1]; } if(m % 2 === 1){ sum -= mat[Math.floor(m / 2)][Math.floor(m / 2)]; } return sum; }; ```