原题链接
思路一:
本质就是找规律啦:
将问题分类:
[主对角线,副对角线] 和 [其他区域] ;
所以判断的时候要对这两个区域进行不同的处理。
关键是如何区分这两个区域;
既然是矩阵,自然就存在对称性质,充分利用对称性进行判断!
总结:
假设一个行列下标都是从0开始的矩阵:
通过行号可以找到本行中,与当前格子对称的格子的坐标(列号!)。
由于数组下标是从0开始的,因此数组g
的最后一列的下标是n-1
而不是n
;同时,在第二条斜线上的元素下标的横纵坐标之和也是n-1
而不是n
。
代码二:
class Solution {
public:
bool checkXMatrix(vector<vector<int>>& g) {
int n = g.size();
for (int i=0; i < n; i ++)
{
for (int j=0; j < n; j ++)
{
if (i == j) {
if (g[i][j] == 0) {
return false;
}
}
else if (j == n-1-i) {
if (g[i][j] == 0)
return false;
}
else if (g[i][j] != 0){
return false;
}
}
}
return true;
}
};
思路二:
性质:
主对角线的横纵坐标相等;
副对角线的横坐标 + 纵坐标 = 矩阵的行/列 数 - 1;
代码二:
class Solution {
public:
bool checkXMatrix(vector<vector<int>>& g) {
int n = g.size();
for (int i=0; i < n; i ++)
{
for (int j=0; j < n; j ++)
{
if (i == j || i + j == n-1)
{
if (g[i][j] == 0)
return false;
}
else if (g[i][j] != 0)
return false;
}
}
return true;
}
};