给你一个二维 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'
。
我的解答:
class Solution {
public boolean canMakeSquare(char[][] grid) {
for(int i = 0;i < 2;i++){
for(int j = 0;j < 2; j++){
/*
int w = 0;
w += grid[i][j] == 'W' ? 1 : 0;
w += grid[i][j + 1] == 'W' ? 1 : 0;
w += grid[i + 1][j] == 'W' ? 1 : 0;
w += grid[i + 1][j + 1] == 'W' ? 1 : 0;
if(w != 2) return true;
*/
// 直接判断四个值是否为两个‘B’、两个‘W’,减少对象创建
if((grid[i][j] + grid[i][j + 1] + grid[i + 1][j] + grid[i + 1][j + 1] ) != 2 * 'B' + 2 * 'W') return true;
}
}
return false;
}
}