美文网首页
LeetCode:529 SL

LeetCode:529 SL

作者: alex很累 | 来源:发表于2022-09-25 23:00 被阅读0次

问题链接

529 SL

问题描述

给你一个大小为 m x n 二维字符矩阵 board ,表示盘面,其中:
M 代表一个 未挖出的 地雷,
E 代表一个 未挖出的 空方块,
B 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的 已挖出的 空白方块,
数字(18)表示有多少地雷与这块 已挖出的 方块相邻,
X 则表示一个 已挖出的 地雷。
给你一个整数数组 click ,其中 click = [clickr, clickc] 表示在所有 未挖出的 方块(M 或者 E)中的下一个点击位置(clickr 是行下标,clickc 是列下标)。

根据以下规则,返回相应位置被点击后对应的盘面:
如果一个地雷M被挖出,游戏就结束了- 把它改为 X
如果一个 没有相邻地雷 的空方块E被挖出,修改它为B,并且所有和其相邻的 未挖出 方块都应该被递归地揭露。
如果一个 至少与一个地雷相邻 的空方块E被挖出,修改它为数字18 ,表示相邻地雷的数量。
如果在此次点击中,若无更多方块可被揭露,则返回盘面。

示例

解题思路

模拟法+深度优先搜索直接冲!

代码示例(JAVA)

class Solution {
    int[] arrX = {1, -1, 0, 0, 1, -1, 1, -1};
    int[] arrY = {0, 0, 1, -1, 1, -1, -1, 1};

    public char[][] updateBoard(char[][] board, int[] click) {
        dfs(board, click);
        return board;
    }

    public void dfs(char[][] board, int[] click) {
        int m = board.length, n = board[0].length;
        int x = click[0], y = click[1];
        if (board[x][y] == 'M') {
            board[x][y] = 'X';
            return;
        }
        int count = 0;
        for (int i = 0; i < arrX.length; i++) {
            if (x + arrX[i] >= 0 && x + arrX[i] < m && y + arrY[i] >= 0 && y + arrY[i] < n
                    && board[x + arrX[i]][y + arrY[i]] == 'M') {
                count++;
            }
        }
        if (count != 0) {
            board[x][y] = (char) (count + 48);
        } else {
            board[x][y] = 'B';
            for (int i = 0; i < arrX.length; i++) {
                if (x + arrX[i] >= 0 && x + arrX[i] < m && y + arrY[i] >= 0 && y + arrY[i] < n
                        && (board[x + arrX[i]][y + arrY[i]] == 'M' || board[x + arrX[i]][y + arrY[i]] == 'E')) {
                    dfs(board, new int[]{x + arrX[i], y + arrY[i]});
                }
            }
        }
    }
}

执行结果

相关文章

  • LeetCode:529 SL

    问题链接 529 SL[https://leetcode.cn/problems/minesweeper/] 问题...

  • leetcode 529. Minesweeper

    原题地址 https://leetcode.com/problems/minesweeper/descriptio...

  • leetcode 529. Minesweeper

    Let's play the minesweeper game (Wikipedia, online game)!...

  • sl

    老爸因病住院了! 这病来得措手不及,打乱了我暑假所有的工作安排,陪老爸在医院确诊,到可以做手术,我全程参与,经受了...

  • 8 A Talk at Home

    【生词】 slingshot:/'slɪŋʃɒt,ˋslɪŋ͵ʃɑt/n.[C]n. 弹弓 vaguely:in ...

  • 529

  • 529

    529 今天课很少,只有一节课,上午整了整学生的照片,下午就在看看视频刷刷抖音中荒废了过去,心理虽然想着听课记录和...

  • 529

    .

  • 529

    你从我这里得到了原谅 从而获得了救赎 好像从此解放 所以你开始肆无忌惮 而我还傻傻念着旧情 但我也依旧是那个只有在...

  • 529

    日子过得真快,五月将走完,六月开始了,而我们这里又开始了新的一轮疫情,常听说了这句话2020年活着最好,真是...

网友评论

      本文标题:LeetCode:529 SL

      本文链接:https://www.haomeiwen.com/subject/nlhtartx.html