题目 leetcode.cn/
-
如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :
- 矩阵对角线上的所有元素都 不是 0
- 矩阵中所有其他元素都是 0
-
给你一个大小为
n x n的二维整数数组grid,表示一个正方形矩阵。如果 **grid**是一个 X 矩阵 ,返回true;否则,返回false。
示例
-
示例 1:
-
- 输入: grid = [[2,0,0,1],[0,3,1,0],[0,5,2,0],[4,0,0,2]]
- 输出: true
- 解释: 矩阵如上图所示。X 矩阵应该满足:绿色元素(对角线上)都不是 0 ,红色元素都是 0 。因此,grid 是一个 X 矩阵。
-
-
示例 2:
-
- 输入: grid = [[5,7,0],[0,3,1],[0,5,0]]
- 输出: false
- 解释: 矩阵如上图所示。X 矩阵应该满足:绿色元素(对角线上)都不是 0 ,红色元素都是 0 。因此,grid 不是一个 X 矩阵。
-
提示
n == grid.length == grid[i].length3 <= n <= 1000 <= grid[i][j] <= 105
代码
function checkXMatrix(grid: number[][]): boolean {
for(let i = 0; i < grid.length; i++){
for(let k = 0; k < grid.length; k++){
if(k === i && grid[i][k] === 0){
return false
} else if(k === grid.length - i - 1 && grid[i][k] === 0){
return false
} else if(k !== i && k !== grid.length - i - 1){
if(grid[i][k] !== 0){
return false;
}
}
}
}
return true;
};
- 双重遍历 + 排除不符
- 矩阵其实就是一个二维数组,按照要求去判断对应位置上数字是否等于
0 - 不是一个合格矩阵的有两种情况
- 第一种就是对角线上的数字有一个是
0 - 第二种就是不是对角线的数字有一个不是
0
- 第一种就是对角线上的数字有一个是
- 双重遍历该二维数组,外层遍历矩阵的每一行,内层遍历矩阵的每一行的每一列。剩下来就该判断哪几项是在对角线上的,哪几项不是在对角线上的,这就需要找规律了:
第一行在对角线上的是第一个和最后一个第二行在对角线上的是第二个和倒数第二个第三行在对角线上的是第三个和倒数第三个- ......
第i行在对角线上的是第i个和倒数第i个
- 外层遍历参数
i就代表第几行,内层参数k代表第几列。他们两个的联系就是当第 i 行第 i 列和当第 i 行倒数第 i 列都在对角线上。只需要转化为表达式表达出来,再判断其值是否等于0就可以了 - 如果全部通过,则说明当前矩阵是符合的矩阵,返回
true
- 矩阵其实就是一个二维数组,按照要求去判断对应位置上数字是否等于
结果
- 双重遍历: