题目
给你一个二维 3x3 的矩阵 grid
,每个格子都是一个字符,要么是 'B'
,要么是 'W'
。字符 'W'
表示白色,字符 'B'
表示黑色。
你的任务是改变至多一个格子的颜色,使得矩阵中存在一个 2x2 颜色完全相同的正方形。
如果可以得到一个相同颜色的 2x2 正方形,那么返回 true
,否则返回 false
示例 1:
输入: grid=["B","W","B"],["B","W","W"],["B","W","B"]
输出: true
解释: 修改 grid[0][2]
的颜色,可以满足要求。
示例 2:
输入: grid=["B","W","W"],["W","W","W"],["B","W","B"]
输出: false
解释: 只改变一个格子颜色无法满足要求。
示例 3:
输入: grid=["B","B","B"],["W","W","W"],["B","W","B"]
输出: true
解释: grid 已经包含一个 2x2 颜色相同的正方形了。
解题思路
对于 3*3 的格子而言,要想得到 2*2 的格子只需要确定其左上角的点即可知道其余点的位置
假设其左上角点的坐标为(i , j),则其余点为:(i+1 , j),(i+1 , j+1),(i , j+1)
对于一个 2*2 的格子而言,要想满足情况则要求只存在一黑或者一白的状况(假设统计的是白,则白色个数为1,3,4,即不为2)
代码
class Solution {
public:
bool canMakeSquare(vector<vector<char>>& grid) {
auto
check=[&](int i,int j){
int ans=0;
if(grid[i][j]=='W') ans++;
if(grid[i+1][j]=='W') ans++;
if(grid[i+1][j+1]=='W') ans++;
if(grid[i][j+1]=='W') ans++;
return ans!=2;
};
return check(0,0)||check(0,1)||check(1,0)||check(1,1);
}
};