时间复杂度和空间复杂度都是Omn也就是矩阵大小
class Solution { public: void count(vector<vector<char>>& board, vector<int>& click){ vector<int> x = {0,0,1,1,1,-1,-1,-1}; vector<int> y = {1,-1,0,1,-1,0,1,-1}; int result= 0; for(int i=0;i<8;i++){ if((x[i]+click[0])>=0&&(x[i]+click[0])<board.size()&&(click[1]+y[i])>=0&&(click[1]+y[i])<board[0].size()){ if(board[(x[i]+click[0])][(y[i]+click[1])]==‘M‘){ result++; } } } if (result==0){ for(int i=0;i<8;i++){ if((x[i]+click[0])>=0&&(x[i]+click[0])<board.size()&&(click[1]+y[i])>=0&&(click[1]+y[i])<board[0].size()){ if(board[(x[i]+click[0])][(y[i]+click[1])]==‘E‘){ vector<int> temp = {(x[i]+click[0]),(y[i]+click[1])}; dpSearch(board,temp); } } } board[click[0]][click[1]]=‘B‘; }else{ board[click[0]][click[1]]=result+‘0‘; } } void dpSearch(vector<vector<char>>& board, vector<int>& click){ if(click[0]<board.size()&&click[0]>=0&&click[1]>=0&&click[1]<board[0].size()){ if(board[click[0]][click[1]]==‘M‘){ board[click[0]][click[1]] = ‘X‘; return; }else{ if(board[click[0]][click[1]]==‘E‘){ board[click[0]][click[1]]=‘T‘; count(board,click); } } } } vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) { dpSearch(board,click); return board; } };
借助队列使用广搜也可以,当四周不存在地雷时,把四周的节点加入到队列中。
原文:https://www.cnblogs.com/BoysCryToo/p/13534924.html