题目链接

岛屿的最大面积

题目描述

image.png

解题思路

方法一:DFS

解决问题的核心在于:每次遍历完后,将遍历到的1全部改成0,这样就可以防止重复遍历了;

实现代码如下:

  1. class Solution {
  2. public int maxAreaOfIsland(int[][] grid) {
  3. int ans = 0;
  4. for (int i = 0; i != grid.length; ++i) {
  5. for (int j = 0; j != grid[0].length; ++j) {
  6. ans = Math.max(ans, dfs(grid, i, j));
  7. }
  8. }
  9. return ans;
  10. }
  11. public int dfs(int[][] grid, int cur_i, int cur_j) {
  12. if (cur_i < 0 || cur_j < 0 || cur_i == grid.length || cur_j == grid[0].length || grid[cur_i][cur_j] != 1) {
  13. return 0;
  14. }
  15. grid[cur_i][cur_j] = 0;
  16. int[] di = {0, 0, 1, -1};
  17. int[] dj = {1, -1, 0, 0};
  18. int ans = 1;
  19. for (int index = 0; index != 4; ++index) {
  20. int next_i = cur_i + di[index], next_j = cur_j + dj[index];
  21. ans += dfs(grid, next_i, next_j);
  22. }
  23. return ans;
  24. }
  25. }