日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

[LeetCode] 130. Surrounded Regions Java

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LeetCode] 130. Surrounded Regions Java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:Given a 2D board containing?'X'?and?'O'?(the?letter?O), capture all regions surrounded by?'X'.

A region is captured by flipping all?'O's into?'X's in that surrounded region.

For example,

X X X X
X O O X
X X O X
X O X X

After running your function, the board should be:

X X X X
X X X X
X X X X
X O X X
題意及分析:給出一個二位矩陣,若存在'O'組成的區域被‘X’包含,那么將改‘O’區域替換為‘X’。我最開始想到的是,用一個visited[row][col]保存該點是否訪問過,然后遍歷矩陣,對遇到的非邊界、為訪問過的‘O’點進行區域查找,將區域用一個List<Integer[]> 保存,若不存在在邊界的‘O’,那么該區域滿足條件(其實就是圖的寬度查找),但是這里用了遞歸,所以運行代碼棧溢出。。。反向思維:從邊界的‘O’點開始查找,如果有何邊界的‘O’點相連的則不用替換(這里用一個'#'先替換),遍歷所有的邊界‘O’,最后對遍歷一次矩陣,將所有的'O'轉化為‘X’,然后在遍歷一次將‘#’轉回為‘O’,這樣可以直接替換,不需要保存可能的值。 內存溢出代碼:
public class Solution {public void solve(char[][] board) {int row = board.length;     //行數if(row==0) return;int col=board[0].length;      //列數boolean[][] visited = new boolean[row][col];for(int i=0;i<row;i++){for(int j=0;j<col;j++){List<Integer[]> union = new ArrayList<>();if((i!=0&&j!=0&&i!=row-1&&j!=col-1)&&(board[i][j]=='O')&&(!visited[i][j])){     //遍歷到非邊界且未被訪問過的'o'union.clear();     // 遍歷到一個未被訪問的o點,就訪問該點能到達的所有'o'點boolean[] isNeedChange = {true};     //判斷該'o'點能達到的區域是否滿足要求
                    findUnion(visited,union,i,j,board,isNeedChange);if(isNeedChange[0]){     //該區域需要改變,那就改變咯for(int m=0;m<union.size();m++){Integer[] temp = union.get(m);board[temp[0]][temp[1]] = 'X';}}}}}}public void findUnion(boolean[][] visited,List<Integer[]> union,int i,int j,char[][] board,boolean[] isNeedChange){     //查找某一個'o'區域int row = board.length;int col = board[0].length;if(visited[i][j]) return;           //該點已經訪問過,直接返回visited[i][j] =true;Integer[] indexs = {i,j};if(isNeedChange[0]==false) {union.clear();return;}else {union.add(indexs);}if(i-1>=0&&board[i-1][j]=='O'){     //if(i-1==0) isNeedChange[0]=false;   //邊界點有為'o'的findUnion(visited,union,i-1,j,board,isNeedChange);}if(i+1<row&&board[i+1][j]=='O'){     //if(i+1==row-1) isNeedChange[0]=false;   //邊界點有為'o'的findUnion(visited,union,i+1,j,board,isNeedChange);}if(j-1>=0&&board[i][j-1]=='O'){     //if(j-1==0) isNeedChange[0]=false;   //邊界點有為'o'的findUnion(visited,union,i,j-1,board,isNeedChange);}if(j+1<col&&board[i][j+1]=='O'){    //if(j+1==col-1) isNeedChange[0]=false;   //邊界點有為'o'的findUnion(visited,union,i,j+1,board,isNeedChange);}}
}

?AC代碼:

public class Solution {public void solve(char[][] board) {int row = board.length;     //行數if(row==0) return;int col=board[0].length;      //列數Queue<Integer[]> queue = new LinkedList<>();       //記錄需要被替換的點,初始時是邊界的點for(int i=0;i<col;i++){if(board[0][i]=='O') {      //上邊界點為'O',寬度查找Integer[] index={0,i};queue.offer(index);}}for(int i=0;i<col;i++){if(board[row-1][i]=='O') {  //下邊界有'O'Integer[] index={row-1,i};queue.offer(index);}}for(int i=1;i<row-1;i++){     //左邊界點有’‘if(board[i][0]=='O') {Integer[] index={i,0};queue.offer(index);}}for(int i=1;i<row-1;i++){if(board[i][col-1]=='O') {Integer[] index={i,col-1};queue.offer(index);}}while(!queue.isEmpty()){Integer[] index = queue.poll();int m = index[0],n=index[1];if(board[m][n]=='O'){     //初次遍歷到該點board[m][n]='#';  //將該點置為'#'if(m>=1&&board[m-1][n]=='O'){Integer[] temp = {m-1,n};queue.offer(temp);}if(m<row-1&&board[m+1][n]=='O'){Integer[] temp = {m+1,n};queue.offer(temp);}if(n>=1&&board[m][n-1]=='O'){Integer[] temp = {m,n-1};queue.offer(temp);}if(n<col-1&&board[m][n+1]=='O'){Integer[] temp = {m,n+1};queue.offer(temp);}}}for(int i=0;i<row;i++){     //替換被包含的'O'點for (int j=0;j<col;j++){if(board[i][j]=='O')board[i][j]='X';}}for(int i=0;i<row;i++){     //替換回來for (int j=0;j<col;j++){if(board[i][j]=='#')board[i][j]='O';}}return;}
}

?

?

?

?

轉載于:https://www.cnblogs.com/271934Liao/p/7239411.html

總結

以上是生活随笔為你收集整理的[LeetCode] 130. Surrounded Regions Java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。