仔细想一下不是一道难题,但是不知道有没有人跟我一样一开始第一想法就是用深搜去写。
显然如果用深搜就跌倒大坑里面去了,答案应该是可以做出来,但是太复杂了。
这道题不需要思考那么深,仔细想一下,无非就是两种情况,一种对角线元素不是0;一种剩下的全是0;那把对角线元素和非对角线元素分开考虑不就好了吗?
思路:
如何分开对角线元素与非对角线元素呢?
可以选择一行一行遍历,找到对角线元素的坐标关系,则一行中剩下的元素就是非对角线元素了,然后分别判断他们是否满足 0与非0的情况即可。
不满足就直接break;
所以重点在于关系:当 想到 arr[i][i]表示正向的对角线元素,而反向对角线元素为arr[i][col-i] !!!,类似于“互补”有没有?!那代码就好写了。
class Solution {
public:
bool flag=true;
void fun(vector<vector<int>>& grid,int x)
{
for(int y=0;y<grid[x].size();y++){
if(x==y||x==grid[x].size()-1-y){
if(grid[x][y]==0){
flag=false;
break;
}
}
else{
if(grid[x][y]!=0){
flag=false;
break;
}
}
}
}
bool checkXMatrix(vector<vector<int>>& grid) {
for(int i=0,x=0;i<grid.size();i++,x++){
fun(grid,x);
if(!flag)
break;
}
return flag;
}
};