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;    
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值