力扣:扫雷游戏

题目描述


给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。
现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:

  • 如果一个地雷('M')被挖出,游戏就结束了- 把它改为 'X'。
  • 如果一个没有相邻地雷的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的未挖出方块都应该被递归地揭露。
  • 如果一个至少与一个地雷相邻的空方块('E')被挖出,修改它为数字('1'到'8'),表示相邻地雷的数量。
  • 如果在此次点击中,若无更多方块可被揭露,则返回面板。

力扣529 扫雷游戏

图片说明

题意明了,直接上代码

class Solution {
    public char[][] updateBoard(char[][] board, int[] click) {
        int x = click[0] , y = click[1];
        //如果所点击的点正好是雷,直接修改为 X 返回,反之 遍历周围的 8 个顶点
        //但如果周围没有雷,修改当前格子为 B ,返回
        if(board[x][y] == 'M'){
            board[x][y] = 'X';
        } else {
            dfs(board , x , y);
        }
        return board;
    }

    public void dfs(char[][] board , int x , int y){

        // 左,左上,上,右上,右,右下,下,左下  8个方向
        int[] dx = {0 , -1 , -1 , -1 , 0 , 1 , 1 , 1};
        int[] dy = {-1 , -1 , 0 , 1 , 1 , 1 , 0 , -1};

        //先统计一下当前点周围有多少颗雷
        int cnt = 0; 
        for(int i = 0 ; i < 8 ; i ++){
            int nx = x + dx[i];
            int ny = y + dy[i];
            if(nx < 0 || nx >= board.length || ny < 0 || ny >= board[0].length) continue; //越界
            if(board[nx][ny] == 'M') cnt ++;
        }
        if (cnt > 0) {
            board[x][y] =  (char)(cnt + '0');
            return;
        }

        //如果周围没有雷,设置为 B
        board[x][y] = 'B';
        for(int i = 0 ; i < 8 ; i ++){
            int nx = dx[i] + x;
            int ny = dy[i] + y;
            if(nx < 0 || nx >= board.length || ny < 0 || ny >= board[0].length || board[nx][ny] != 'E') continue; //越界, 
            dfs(board , nx , ny);
        }
    }

}
全部评论

相关推荐

05-16 21:54
已编辑
门头沟学院 前端工程师
蓝曦111:我也是25届,这是第二次被裁了,毕业没到一年就失业两次,两次都是公司问题。第一家才转正一个月,跟我说公司拿不到项目结款没办法,赔了一个月;第二个公司连工资都发不出来了,赔偿更别想了,我算是认命了,这条路也不知道能走多远走多久,不过生活还是要继续的,走一步看一步吧
当你面对裁员会如何?
点赞 评论 收藏
分享
03-29 17:05
门头沟学院 Java
asdasdasda...:我前段时间找工作焦虑,有几天连续熬夜熬穿了,然后心脏突然不舒服,立马躺床上睡觉了,然后第二天还是不舒服,去看医生说是心率不齐,吓得我后面天天早早睡觉,调养身体,过了好几天才好过来。所以真的,工作这些东西哪有那么重要,最多钱多一点钱少一点,降低物欲。活着才是最重要的,现在想想真的后怕
如何排解工作中的焦虑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务