文章目录
- 2319. 判断矩阵是否是一个 X 矩阵
- 方法1:直接遍历
2319. 判断矩阵是否是一个 X 矩阵
LeetCode: 2319. 判断矩阵是否是一个 X 矩阵
简单 \color{#00AF9B}{简单} 简单
如果一个正方形矩阵满足下述 全部 条件,则称之为一个 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].length
3 <= n <= 100
0 <= grid[i][j] <= 10^5
方法1:直接遍历
直接遍历这个二维数组 grid
。
设 行索引 为 y
、列索引 为 x
。若当前元素在 主对角线 上(y == x
)或在 副对角线 上(y + x == n - 1
)时,再判断 grid[y][x]
若是 0
,则返回 false
;若当前元素不在对角线上,再判断 grid[y][x]
若不是 0
,则返回 false
。
遍历完成后,返回 true
。
#include <vector>
using namespace std;
class Solution
{
public:
bool checkXMatrix(const vector<vector<int>>& grid)
{
const int n = grid.size();
for (int y = 0; y < n; ++y)
{
for (int x = 0; x < n; ++x)
{
if (y == x || y + x == n - 1)
{
if (grid[y][x] == 0)
return false;
}
else if (grid[y][x] != 0)
return false;
}
}
return true;
}
};
复杂度分析:
-
时间复杂度: O ( n 2 ) O(n^2) O(n2)。其中, n n n 为正方形矩阵
grid
的行列数。 -
空间复杂度: O ( 1 ) O(1) O(1)。没有用到额外的、大小与输入数据有关的变量,因此仅占用常数的额外空间。
参考结果
Accepted
84/84 cases passed (32 ms)
Your runtime beats 47.40 % of cpp submissions
Your memory usage beats 90.81 % of cpp submissions (15.8 MB)