![在这里插入图片描述](https://img-blog.csdnimg.cn/f69da427ae51498086f4735218edf53c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAJCQtJCQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
Java代码
class Solution {
static int[][] direction = {{1,0}, {-1, 0}, {0, 1}, {0, -1}};
static char[][] image1;
static int maxX, maxY;
static int minX, minY;
public int minArea(char[][] image, int x, int y) {
image1 = image;
maxX = Integer.MIN_VALUE;
maxY = Integer.MIN_VALUE;
minX = Integer.MAX_VALUE;
minY = Integer.MAX_VALUE;
dfs(x, y);
return (maxX-minX+1)*(maxY-minY+1);
}
static void dfs(int x, int y){
if(image1[x][y] == '0') return;
image1[x][y] = '0';
maxX = Math.max(maxX, x);
maxY = Math.max(maxY, y);
minX = Math.min(minX, x);
minY = Math.min(minY, y);
for(int i = 0;i < 4;i++){
int dx = x+direction[i][0];
int dy = y+direction[i][1];
if(dx >= image1.length || dx < 0 || dy >= image1[0].length || dy < 0) continue;
dfs(dx, dy);
}
}
}
解题思路
先提前说一下,在力扣上面如果使用静态变量,最好是在执行函数里进行初始化
具体原理应该是这样的
力扣在进行检验时,加载我们的类然后执行方法,静态只会在加载时进行初始化,力扣系统后续不断调用我们的方法时都
不会对我们的静态变量进行初始化,这就导致了,如果你的静态变量在运行时被修改了,那么下一次的检验中静态变量就
会以上一次修改的值参与计算,而不是初始化的值,所以我们需要做执行函数中对静态变量进行初始化。
这一题思路就比较简单了,深搜,深搜中对宽高的最大最小进行记录,然后最大最小相减加一在相乘,这里面没有必要
去用vis对访问的格子进行标记,只需对原来的格子进行修改就可以了。