Leetcode130:SurroundedRegions

Leetcode130:SurroundedRegions
这题就是基本的DFS/BFS加入一些变形,用DFS/BFS都可以解。我两种方法都写了一下,DFS要简洁一些。
DFS:

public class Solution {

int m,n;

char[][]board;

void dfs(int x,int y){

if(x<0 ||x>=m || y<0 || y>=n ||board[x][y]!='O') return;

board[x][y]='D';

dfs(x-1,y);

dfs(x+1,y);

dfs(x,y-1);

dfs(x,y+1);

}

public voidsolve(char[][] board){

if(board==null ||board.length==0) return;

this.board=board;

m=board.length;

n=board[0].length;

for(intj=0;j<n;j++){

dfs(0,j);

dfs(m-1,j);

}

for(inti=1;i<m-1;i++){

dfs(i,0);

dfs(i,n-1);

}

for(inti=0;i<m;i++)

for(int j=0;j<n;j++){

if(board[i][j]=='O') board[i][j]='X';

elseif(board[i][j]=='D') board[i][j]='O';

}

}

}


BFS:public class Solution { int m,n; char[][] board; Queue<Integer> queue=newLinkedList<Integer>(); void fill(int x, inty){ if(x<0 || x>=m ||y<0 || y>=n || board[x][y]!='O')return; queue.offer(x*m+y); board[x][y]='D'; } void bfs(int x, inty){ fill(x,y); while(!queue.isEmpty()){ intcurr=queue.poll(); inti=curr/n; intj=curr%n; fill(i-1,j); fill(i+1,j); fill(i,j-1); fill(i,j+1); } } public voidsolve(char[][] board){ if(board==null || board.length==0) return; this.board=board; m=board.length; n=board[0].length; for(int j=0;j<n;j++){ bfs(0,j); bfs(m-1,j); } for(int i=1;i<m-1;i++){ bfs(i,0); bfs(i,n-1); } for(int i=0;i<m;i++) for(intj=0;j<n;j++){ if(board[i][j]=='O')board[i][j]='X'; else if(board[i][j]=='D')board[i][j]='O'; } }}
博主对本博客文章及代码享有著作权。网络转载请注明出处http://blog.sina.com.cn/leetcode。整理出版物请和作者联系。

  

爱华网本文地址 » http://www.413yy.cn/a/25101013/172782.html

更多阅读

胡乔木之子胡石英为啥被“带”出中南海 胡石英事件

笔者近日在一次聚会中,遇到了80年代著名的文学期刊《丑小鸭》杂志社的一些编辑、工作人员。  当年的编辑何养明老先生,今年已82岁高龄,但精神矍铄、身体非常好,看上去要比实际年龄年轻许多。当年的编辑、今年已经60多岁的王英驰。还有

商人如何思考 2010,中国商人的思考与期盼(3)

 利时集团董事长李立新:  企业升级需要政府引导      以牺牲环境为代价的模式,已经难以为继了,在后金融危机时代,民营企业必须改变原来那种粗放、简单、以量取胜、靠低成本发展的模式。  改革开放30年来,我国民营经济得到了很

淘宝开店注意事项 开店投资谨记的三大项注意

一、谨防高回报率的承诺     网上一些商业媒体对于商业物业投资回报分析的文章中,15%的回报率是个经常出现的数字,说商业物业的投资者在七八年左右就能基本回收成本,以后你就净挣了。不仅如此,现在很多开盘的商业物业项目的宣传广

网上转账要开通网银吗 没有网银怎么进行网上转账

没有网银怎么进行网上转账――简介网络为我们提供很多的很方便的平台,很多朋友通过网络可以做很多的事情,例如,你没有网银,那么想要在银行卡之间进行转账该怎么办呢?其实很简单,我们可以通过各种网络平台进行转账,今天就来和大家分享如何进

声明:《Leetcode130:SurroundedRegions》为网友青丝缠梳分享!如侵犯到您的合法权益请联系我们删除