695.岛屿的最大面积
自己能写出来了,特别注意沉岛思想,就是每次判断当前的位置不为0以后max = 1,然后立即沉岛,以便下一次不会重复计算到这块面积。每次找不到要return 0 需要注意。
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int row = grid.length;
int col = grid[0].length;
int res = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (grid[i][j] == 1){
res = Math.max(res,dfsAreaOfIsland(grid,i,j,0));
}
}
}
return res;
}
private int dfsAreaOfIsland(int[][] grid, int i, int j, int max) {
if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == 0){
return 0;
}
grid[i][j] = 0;
max = 1;
max += dfsAreaOfIsland(grid,i + 1,j,max);
max += dfsAreaOfIsland(grid,i - 1,j,max);
max += dfsAreaOfIsland(grid,i,j - 1,max);
max += dfsAreaOfIsland(grid,i,j + 1,max);
return max;
}
}
面试12.矩阵中的路径
这个自己第二次也写出来了。需要注意的与的操作和没有匹配到该位置 ‘/’ 还原的操作。
class Solution {
public boolean exist(char[][] board, String word) {
char[] arr = word.toCharArray();
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == arr[0]){
if (dfsWordExist(board,i,j,arr,0)) return true;
}
}
}
return false;
}
private boolean dfsWordExist(char[][] board, int i, int j, char[] arr, int len) {
if (i < 0 || j < 0 || i >= board.length || j >= board[0].length || board[i][j] != arr[