LeetCode diferente camino III

1. Título

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Ideas (descripción en lenguaje Java)

El clásico algoritmo de retroceso DFS +, la condición limitante de este problema es que necesita calcular el número de 0 en la matriz bidimensional, más este juicio condicional.

class Solution {
    
    

    //0 1
    //2 0

    int rowLen;
    int colLen;
    int totalCnt = 0;

    public int uniquePathsIII(int[][] grid) {
    
    
        rowLen = grid.length;
        colLen = grid[0].length;
        int zeroNum = getZeroNum(grid);
        for(int i = 0;i<rowLen;i++){
    
    
            for(int j = 0;j<colLen;j++){
    
    
                if(grid[i][j] == 1){
    
    
                    dfs(i,j,grid,0,zeroNum);
                    break;
                }
            }
        }
        return totalCnt;
    }

    public void dfs(int i,int j,int[][] grid,int temp,int zeroNum){
    
    
        if(!checkBoard(i,j) || grid[i][j] == -1){
    
    
            return;
        }
        if(temp!=zeroNum+1 && grid[i][j] == 2){
    
    
            return;
        }
        if(temp == zeroNum+1 && grid[i][j] == 2){
    
    
            totalCnt++;
            return;
        }
        grid[i][j] = -1;
        dfs(i-1,j,grid,temp+1,zeroNum);
        dfs(i,j+1,grid,temp+1,zeroNum);
        dfs(i+1,j,grid,temp+1,zeroNum);
        dfs(i,j-1,grid,temp+1,zeroNum);
        grid[i][j] = 0;
    }

    public int getZeroNum(int[][] grid){
    
    
        int cnt = 0;
        for(int i = 0;i<rowLen;i++){
    
    
            for(int j = 0;j<colLen;j++){
    
    
                if(grid[i][j] == 0){
    
    
                    cnt++;
                }
            }
        }
        return cnt;
    }

    public boolean checkBoard(int i,int j){
    
    
        if(i>=rowLen || i<0) return false;
        if(j>=colLen || j<0) return false;
        return true;
    }

}

para resumir

Después de escribir esta pregunta por primera vez, el resultado de la prueba es siempre 0. Después de pensarlo durante mucho tiempo, descubrí que la condición de juicio, excepto el problema, el número de pasos de búsqueda profunda (temp) debe ser igual a ceroNum +1 en lugar de zeroNum

Supongo que te gusta

Origin blog.csdn.net/weixin_43967679/article/details/108871886
Recomendado
Clasificación