LN : leetcode 529 Minesweeper
lc 529 Minesweeper
Let's play the minesweeper game!
You are given a 2D char matrix representing the game board. 'M' represents an unrevealed mine, 'E' represents an unrevealed empty square, 'B' represents a revealed blank square that has no adjacent (above, below, left, right, and all 4 diagonals) mines, digit ('1' to '8') represents how many mines are adjacent to this revealed square, and finally 'X' represents a revealed mine.
Now given the next click position (row and column indices) among all the unrevealed squares ('M' or 'E'), return the board after revealing this position according to the following rules:
- If a mine ('M') is revealed, then the game is over - change it to
'X'. - If an empty square ('E') with no adjacent mines is revealed, then
change it to revealed blank ('B') and all of its adjacent unrevealed
squares should be revealed recursively. - If an empty square ('E') with at least one adjacent mine is
revealed, then change it to a digit ('1' to '8') representing the
number of adjacent mines. - Return the board when no more squares will be revealed.
Example 1:
Input:
[['E', 'E', 'E', 'E', 'E'],
['E', 'E', 'M', 'E', 'E'],
['E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E']]
Click : [3,0]
Output:
[['B', '1', 'E', '1', 'B'],
['B', '1', 'M', '1', 'B'],
['B', '1', '1', '1', 'B'],
['B', 'B', 'B', 'B', 'B']]
Explanation:
Example 2:
Input:
[['B', '1', 'E', '1', 'B'],
['B', '1', 'M', '1', 'B'],
['B', '1', '1', '1', 'B'],
['B', 'B', 'B', 'B', 'B']]
Click : [1,2]
Output:
[['B', '1', 'E', '1', 'B'],
['B', '1', 'X', '1', 'B'],
['B', '1', '1', '1', 'B'],
['B', 'B', 'B', 'B', 'B']]
Explanation:
Note:
- The range of the input matrix's height and width is [1,50].
- The click position will only be an unrevealed square ('M' or 'E'),
which also means the input board contains at least one clickable
square. - The input board won't be a stage when game is over (some mines have
been revealed). - For simplicity, not mentioned rules should be ignored in this
problem.For example, you don't need to reveal all the unrevealed
mines when the game is over, consider any cases that you will win
the game or flag any squares.
递归 Accepted##
扫雷游戏,其实还挺简单的,注意判断是否在版图之内,利用递归不断推算并且更新。
class Solution {
public:
vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
if (board[click[0]][click[1]] == 'M') {
board[click[0]][click[1]] = 'X';
return board;
}
reveal(board, click[0], click[1]);
return board;
}
int out(vector<vector<char>>& board, int x, int y) {
return (x < 0 || y < 0 || x >= board.size() || y >= board[0].size());
}
void reveal(vector<vector<char>>& board, int x, int y) {
if (out(board, x, y)) return;
if (board[x][y] == 'E') {
int m = 0;
if (!out(board, x-1, y-1) && board[x-1][y-1] == 'M') m++;
if (!out(board, x-1, y) && board[x-1][y] == 'M') m++;
if (!out(board, x-1, y+1) && board[x-1][y+1] == 'M') m++;
if (!out(board, x, y-1) && board[x][y-1] == 'M') m++;
if (!out(board, x, y+1) && board[x][y+1] == 'M') m++;
if (!out(board, x+1, y-1) && board[x+1][y-1] == 'M') m++;
if (!out(board, x+1, y+1) && board[x+1][y+1] == 'M') m++;
if (!out(board, x+1, y) && board[x+1][y] == 'M') m++;
if (m) {
board[x][y] = '0'+m;
} else {
board[x][y] = 'B';
reveal(board, x-1, y-1);
reveal(board, x-1, y);
reveal(board, x-1, y+1);
reveal(board, x, y-1);
reveal(board, x, y+1);
reveal(board, x+1, y-1);
reveal(board, x+1, y+1);
reveal(board, x+1, y);
}
}
}
};
LN : leetcode 529 Minesweeper的更多相关文章
- LeetCode 529. Minesweeper
原题链接在这里:https://leetcode.com/problems/minesweeper/description/ 题目: Let's play the minesweeper game ( ...
- [LeetCode] 529. Minesweeper 扫雷
Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representin ...
- Week 5 - 529.Minesweeper
529.Minesweeper Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char ma ...
- leetcode笔记(七)529. Minesweeper
题目描述 Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix repres ...
- 【LeetCode】529. Minesweeper 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetco ...
- 529 Minesweeper 扫雷游戏
详见:https://leetcode.com/problems/minesweeper/description/ C++: class Solution { public: vector<ve ...
- 529. Minesweeper扫雷游戏
[抄题]: Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix repre ...
- [LeetCode] 529. Minesweeper_ Medium_ tag: BFS
Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representin ...
- LN : leetcode 399 Evaluate Division
lc 399 Evaluate Division 399 Evaluate Division Equations are given in the format A / B = k, where A ...
随机推荐
- 安装adt-bundle-windows-x86-20130917时遇到的问题及解决方法
最近在上安卓课,老师让我们下载此软件(adt-bundle-windows-x86-20130917.下载压缩后,打开eclipse的时候,会出现以下情况: 这时说明你的jdk还没下载或者下载错位置了 ...
- C#.NET 如何打开高版本的sln文件
我用VS2008去打开2010版本的解决方案,提示如下 其实我可以直接打开这个csproj文件并运行 关闭之后就会提示是否创建一个新的 sln文件
- linux下alias命令具体解释
linux下alias命令具体解释 用途说明 设置命令的别名.在linux系统中假设命令太长又不符合用户的习惯,那么我们能够为它指定一个别名. 尽管能够为命令建立"链接" 解决长文 ...
- 通俗理解LDA主题模型
通俗理解LDA主题模型 0 前言 印象中,最開始听说"LDA"这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印 ...
- Azure Pack演示样例缩放部署架构
- 树状数组 LA 4329 亚洲赛北京赛区题
复习下树状数组 还是蛮有意思的一道题: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&cat ...
- 【bzoj4538】[Hnoi2016]网络
我们考虑树剖,线段树上维护一个堆,保存不经过该段区间的路径的权值. 对于一条路径我们将对于线段树中的区间提取出来,在对于线段树中进行修改.也就是在堆中插入或删除. 对于一次询问,只要找到包含该点的线段 ...
- ARP协议(4)ARP编程
之前的几篇文章,分别介绍了 ARP 协议格式,在vs2012里配置winpcap环境,我们该做的准备都已经做完了.如今我们真正来实现了. 一.定义数据结构 依据ARP的协议格式,设计一个ARP协议格式 ...
- luogu2540 斗地主增强版
题目大意 给你一副手牌,没有飞机带翅膀,按斗地主的规则,求将所有牌打出的最少次数. 题解 先不考虑顺子 我们已经知道花色对牌没有影响,那么如果不考虑顺子,每个牌具体是什么数字我们也用不着知道,我们关心 ...
- Ubuntu 安装Consolas字体
下载 YaHei.Consolas https://code.google.com/p/uigroupcode/downloads/list 安装 1.创建文件夹 sudo mkdir -p /usr ...