leetcode 岛屿的最大面积

本来最近不打算做图的题,不过既然这个打卡今天轮到这道题,那就来做做吧。这题跟当初我面字节跳动的题目有点类似,当年我就倒在不会写dfs的代码上[/(ㄒoㄒ)/~~]
695.岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
这种题深度优先遍历比较好理解,就是外面两个for找到一个1的位置,然后对这个1进行深♂度♂优♂先♂遍历。看了人家的写法,就是对这个坐标上下左右四个方向的坐标再进行dfs操作,就是递归啦,然后停止递归的条件是超出长度范围或等于0。对了,每次访问一个位置,要把1改成0,避免重复访问。

class Solution {    
	int[][]grid;    
	int dfs(int i,int j)   {        
		if(i<0||j<0||i>=grid.length||j>=grid[0].length)            
			return 0;        
		if(grid[i][j]==0)        
			return 0;        
		grid[i][j]=0;        
		int ans=1;        
		int []di=new int[]{0,0,1,-1};        
		int []dj=new int[]{1,-1,0,0};        
		for(int k=0;k<4;k++)        
		{      	
	 	     int x=di[k]+i,y=dj[k]+j;            
		     ans=ans+dfs(x,y);        
		}        
		return ans;    
	}    
	public int maxAreaOfIsland(int[][] grid) {        
		this.grid=grid;        
		int max=0;        
		for(int i=0;i<grid.length;i++)        
		for(int j=0;j<grid[0].length;j++)        
			max=Math.max(max,dfs(i,j));        
		return max;    
	}
}
发布了45 篇原创文章 · 获赞 4 · 访问量 1043

猜你喜欢

转载自blog.csdn.net/weixin_43838915/article/details/104875602
今日推荐