1.题目描述
给你一个二维
3 x 3
的矩阵grid
,每个格子都是一个字符,要么是'B'
,要么是'W'
。字符'W'
表示白色,字符'B'
表示黑色。你的任务是改变 至多一个 格子的颜色,使得矩阵中存在一个
2 x 2
颜色完全相同的正方形。如果可以得到一个相同颜色的
2 x 2
正方形,那么返回true
,否则返回false
。示例 1:
输入:grid = [["B","W","B"],["B","W","W"],["B","W","B"]]
输出:true
解释:
修改
grid[0][2]
的颜色,可以满足要求。示例 2:
输入:grid = [["B","W","B"],["W","B","W"],["B","W","B"]]
输出:false
解释:
只改变一个格子颜色无法满足要求。
示例 3:
输入:grid = [["B","W","B"],["B","W","W"],["B","W","W"]]
输出:true
解释:
grid
已经包含一个2 x 2
颜色相同的正方形了。提示:
grid.length == 3
grid[i].length == 3
grid[i][j]
要么是'W'
,要么是'B'
。
2.解题思路
模拟题:遍历3*3矩阵中所有大小为2*2的子矩阵,并在遍历过程中统计每一个子矩阵中同一个颜色的块是否>=3个,如果满足这个条件,就说明可以改变 至多一个 格子的颜色,使得矩阵中存在一个 2 x 2
颜色完全相同的正方形
3.代码实现
class Solution {
public boolean canMakeSquare(char[][] grid) {
int[][] loc = {{0,0},{0,1},{1,0},{1,1}};
for (int i = 0; i < loc.length; i++) {
int cnt_b = 0, cnt_w = 0;
int x = loc[i][0], y = loc[i][1];
for (int j = 0; j < loc.length; j++) {
int dx = loc[j][0];
int dy = loc[j][1];
if (grid[x+dx][y+dy] == 'B') {
cnt_b += 1;
} else {
cnt_w += 1;
}
}
if (cnt_b >= 3 || cnt_w >= 3) {
return true;
}
}
return false;
}
}