做销售在那个网站找,保定外贸网站制作,推广公司网站有哪些方式,wordpress前台英文给定一个二维的矩阵#xff0c;包含 ‘X’ 和 ‘O’#xff08;字母 O#xff09;。
找到所有被 ‘X’ 围绕的区域#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
示例:
X X X X X O O X X X O X X O X X 运行你的函数后#xff0c;矩阵变为#xff1a;
X X…给定一个二维的矩阵包含 ‘X’ 和 ‘O’字母 O。
找到所有被 ‘X’ 围绕的区域并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
示例:
X X X X X O O X X X O X X O X X 运行你的函数后矩阵变为
X X X X X X X X X X X X X O X X 解释:
被围绕的区间不会存在于边界上换句话说任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直方向相邻则称它们是“相连”的。
代码
class Solution {public void solve(char[][] board) {if(board.length0) return;int nboard.length,mboard[0].length;int[][] dirnew int[][]{{0,1},{1,0},{-1,0},{0,-1}};boolean[][] checknew boolean[n][m];Queueint[] queuenew LinkedList();for(int i0;im;i)//将边界的O入队{if(board[0][i]O) {queue.add(new int[]{0,i});check[0][i]true;}if(board[n-1][i]O) {queue.add(new int[]{n-1,i});check[n-1][i]true; }}for(int i1;in-1;i){if(board[i][0]O) {queue.add(new int[]{i,0});check[i][0]true;}if(board[i][m-1]O){queue.add(new int[]{i,m-1});check[i][m-1]true;}}while (!queue.isEmpty())//bfs将与边界O连接的点找出来标记{int[] tempqueue.poll();for (int[] d:dir){int xtemp[0]d[0],ytemp[1]d[1];if(x0||xn||y0||ym||board[x][y]X||check[x][y]) continue;queue.offer(new int[]{x,y});check[x][y]true;}}for(int i0;in;i)//除了与边界O连接的点全部置为xfor(int j0;jm;j)board[i][j]check[i][j]?O:X;}
}