LeetCode
来源:互联网 发布:tcp ip网络协议分析 编辑:程序博客网 时间:2024/04/30 09:55
解题代码:
classSolution {
public:
boolin(vector<vector<char>>& board,int i,int j){
if(i>=0&&i<board.size()&&j>=0&&j<board[0].size())return true;
else return false;
}
voidcheck(vector<vector<char>>& board,int i,int j){
if(!in(board,i,j)) return;
if(board[i][j]=='E'){
int count=0;
if(in(board,i-1,j-1)&&board[i-1][j-1]=='M')
count++;
if(in(board,i-1,j)&&board[i-1][j]=='M')
count++;
if(in(board,i-1,j+1)&&board[i-1][j+1]=='M')
count++;
if(in(board,i,j-1)&&board[i][j-1]=='M')
count++;
if(in(board,i,j+1)&&board[i][j+1]=='M')
count++;
if(in(board,i+1,j-1)&&board[i+1][j-1]=='M')
count++;
if(in(board,i+1,j)&&board[i+1][j]=='M')
count++;
if(in(board,i+1,j+1)&&board[i+1][j+1]=='M')
count++;
if(count>0){
board[i][j]='0'+count;
}
else{
board[i][j]='B';
check(board,i-1,j-1);
check(board,i-1,j);
check(board,i-1,j+1);
check(board,i,j-1);
check(board,i,j+1);
check(board,i+1,j-1);
check(board,i+1,j);
check(board,i+1,j+1);
}
}
}
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;
}
check(board,click[0],click[1]);
return board;
}
};
解题思路:
本题主要是在模拟扫雷游戏中的过程,若选中雷,则结束游戏,若选中的格子没有雷,就判断选中的区域周围八个格子中是否有雷,若有,就显示周围雷的总数,若无,就要对它周围的八个格子都要尽心检查。因此可以使用递归的方法对格子进行检查。其中需要注意的地方主要有两个,一个是检查的格子是否在边界的位置,另一个是若某个格子已经被检测过,显示为‘B’,就不需要继续进行检测。
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- bootstrap中常用的插件及示例
- JAVA动态任务SCHEDULEJOB
- 测试
- kali linux中文版终端字体重叠问题
- 静态局部变量
- LeetCode
- Saprk数据倾斜七解决方案(三)
- Mapper部分联合查询问题
- 单点登录SSO的实现原理
- android自定义组件添加及界面刷新
- MapReduce过程详解
- 怎样根据需求来划分子网
- iOS开发中手势相关的学习使用
- poj——1273 Drainage Ditches(费用流模版)