牛客57、61(图)
牛客57.岛屿数量
dfs
import java.util.*; public class Solution { /** * 判断岛屿数量 * @param grid char字符型二维数组 * @return int整型 */ public int solve (char[][] grid) { int n = grid.length; if (n == 0) return 0; int m = grid[0].length; int count = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (grid[i][j] == '1') { count++; dfs(grid, i, j); } } } return count; } public void dfs(char[][] grid, int i, int j) { int n = grid.length; int m = grid[0].length; grid[i][j] = '0'; if (i - 1 >= 0 && grid[i - 1][j] == '1') dfs(grid, i - 1, j); if (i + 1 < n && grid[i + 1][j] == '1') dfs(grid, i + 1, j); if (j - 1 >= 0 && grid[i][j - 1] == '1') dfs(grid, i, j - 1); if (j + 1 < m && grid[i][j + 1] == '1') dfs(grid, i, j + 1); } }
牛客61.矩阵最长递增路径
dfs
import java.util.*; public class Solution { private int[][] dirs = new int[][] {{-1,0}, {1,0}, {0,-1},{0,1}}; private int n, m; public int dfs (int[][] matrix, int[][] dp, int i, int j) { if (dp[i][j] != 0) return dp[i][j]; dp[i][j]++; for (int k = 0; k < 4; k++) { int nexti = i + dirs[k][0]; int nextj = j + dirs[k][1]; if (nexti >= 0 && nexti < n && nextj >= 0 && nextj < m && matrix[nexti][nextj] > matrix[i][j]) dp[i][j] = Math.max(dp[i][j], dfs(matrix, dp, nexti,nextj) + 1); } return dp[i][j]; } public int solve (int[][] matrix) { if (matrix.length == 0 || matrix[0].length == 0) return 0; int res = 0; n = matrix.length; m = matrix[0].length; int[][] dp = new int[m + 1][n + 1]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { res = Math.max(res, dfs(matrix, dp, i, j)); } } return res; } }