2319. 判断矩阵是否是一个 X 矩阵

198 阅读2分钟

题目 leetcode.cn/

  • 如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :

    • 矩阵对角线上的所有元素都 不是 0
    • 矩阵中所有其他元素都是 0
  • 给你一个大小为 n x n 的二维整数数组 grid ,表示一个正方形矩阵。如果 **grid **是一个 X 矩阵 ,返回 true ;否则,返回 false 。

示例

  • 示例 1:

    • image.png

    • 输入: grid = [[2,0,0,1],[0,3,1,0],[0,5,2,0],[4,0,0,2]]
    • 输出: true
    • 解释: 矩阵如上图所示。X 矩阵应该满足:绿色元素(对角线上)都不是 0 ,红色元素都是 0 。因此,grid 是一个 X 矩阵。
  • 示例 2:

    • image.png

    • 输入: grid = [[5,7,0],[0,3,1],[0,5,0]]
    • 输出: false
    • 解释: 矩阵如上图所示。X 矩阵应该满足:绿色元素(对角线上)都不是 0 ,红色元素都是 0 。因此,grid 不是一个 X 矩阵。

提示

  • n == grid.length == grid[i].length
  • 3 <= n <= 100
  • 0 <= 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

结果

  • 双重遍历:

image.png