构造相同颜色的正方形

2024-08-31

题目:

给你一个二维 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:
    bool canMakeSquare(vector<vector<char>>& grid) {
        // 第一种2 * 2
        int cnt_W = 0;
        if (grid[0][0] == 'W') cnt_W++;
        if (grid[0][1] == 'W') cnt_W++;
        if (grid[1][0] == 'W') cnt_W++;
        if (grid[1][1] == 'W') cnt_W++;
        if (cnt_W != 2) return true;
        // 第二种2 * 2
        cnt_W = 0;
        if (grid[0][1] == 'W') cnt_W++;
        if (grid[0][2] == 'W') cnt_W++;
        if (grid[1][1] == 'W') cnt_W++;
        if (grid[1][2] == 'W') cnt_W++;
        if (cnt_W != 2) return true;
        // 第三种2 * 2
        cnt_W = 0;
        if (grid[1][0] == 'W') cnt_W++;
        if (grid[1][1] == 'W') cnt_W++;
        if (grid[2][0] == 'W') cnt_W++;
        if (grid[2][1] == 'W') cnt_W++;
        if (cnt_W != 2) return true;
        // 第四种2 * 2
        cnt_W = 0;
        if (grid[1][1] == 'W') cnt_W++;
        if (grid[1][2] == 'W') cnt_W++;
        if (grid[2][1] == 'W') cnt_W++;
        if (grid[2][2] == 'W') cnt_W++;
        if (cnt_W != 2) return true;
        // 全都没可能
        return false;
    }
};