LeetCode Problem: 695. 岛屿的最大面积:
使用栈实现深度优先搜索,但因为栈与递归的调用原理相同,而递归相对便于实现。
这里我们使用了一个小技巧,对于四个方向的遍历,可以创造一个数组 [-1, 0, 1, 0, -1],每相邻两位即为上下左右四个方向之一。
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int m = grid.length, n = m > 0 ? grid[0].length : 0, localArea, area = 0, x, y;
int[] direction = {-1, 0, 1, 0, -1};
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (grid[i][j] == 1) {
localArea = 1;
grid[i][j] = 0;
Deque<int[]> island = new ArrayDeque<>();
island.push(new int[]{i, j});
while (!island.isEmpty()) {
int[] cell = island.pop();
int r = cell[0], c = cell[1];
for (int k = 0; k < 4; ++k) {
x = r + direction[k];
y = c + direction[k + 1];
if (x >= 0 && x < m &&
y >= 0 && y < n && grid[x][y] == 1) {
grid[x][y] = 0;
++localArea;
island.push(new int[]{x, y});
}
}
}
area = Math.max(area, localArea);
}
}
}
return area;
}
}