[] 63. rutas únicas II LeetCode diferente camino II (Medium) (JAVA)

[] 63. rutas únicas II LeetCode diferente camino II (Medium) (JAVA)

Tema Dirección: https://leetcode-.com/problems/unique-paths-ii/

Descripción Asunto:

Un robot se encuentra en la esquina superior izquierda de amxn rejilla (marcado 'Inicio' en el diagrama de abajo).

El robot sólo puede moverse hacia abajo o derecho en cualquier punto en el tiempo. El robot está tratando de llegar a la esquina inferior derecha de la cuadrícula (marcado 'Finalizar' en el diagrama de abajo).

Ahora considere si algunos obstáculos se añaden a las rejillas. ¿Cuántos caminos única habría?

Un espacio vacío obstáculo y se marca como 1 y 0, respectivamente, en la red.

Nota: myn serán como máximo de 100.

Ejemplo 1:

Input:
[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
Output: 2
Explanation:
There is one obstacle in the middle of the 3x3 grid above.
There are two ways to reach the bottom-right corner:
1. Right -> Right -> Down -> Down
2. Down -> Down -> Right -> Right

Sujeto al efecto

Un robot situado en una cuadrícula mxn esquina izquierda (a partir de la figura punto por debajo de la etiqueta "Inicio").

El robot sólo puede dar un paso hacia la derecha o hacia abajo. Robot tratando de llegar a la esquina inferior derecha de la cuadrícula (en la siguiente figura con la etiqueta "Finalizar").

Consideremos ahora las obstrucciones de la red. Entonces, ¿cuántos caminos diferentes desde la parte superior izquierda a la esquina inferior derecha habrá?

Enfoque de resolución de problemas

1, programación dinámica, atravesando de la parte posterior
2, se encontró con 1, saltar o ponen en el frente y se añaden los valores

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        if (obstacleGrid.length == 0 || obstacleGrid[0].length == 0 || obstacleGrid[obstacleGrid.length - 1][obstacleGrid[0].length - 1] == 1) return 0;
        int[][] dp = new int[obstacleGrid.length][obstacleGrid[0].length];
        dp[obstacleGrid.length - 1][obstacleGrid[0].length - 1] = 1;
        for (int i = obstacleGrid.length - 1; i >= 0; i--) {
            for (int j = obstacleGrid[0].length - 1; j >= 0; j--) {
                if (obstacleGrid[i][j] == 1) continue;
                if (i == obstacleGrid.length - 1 && j == obstacleGrid[0].length - 1) {
                    dp[i][j] = 1;
                } else if (i == obstacleGrid.length - 1) {
                    dp[i][j] = dp[i][j + 1];
                } else if (j == obstacleGrid[0].length - 1) {
                    dp[i][j] = dp[i + 1][j];
                } else {
                    dp[i][j] = dp[i][j + 1] + dp[i + 1][j];
                }
            }
        }
        return dp[0][0];
    }
}

Cuando la ejecución: 1 ms, venció el 83,38% de todos los usuarios a presentar en Java
consumo de memoria: 37,7 MB, derrotado 67.00% de todos los usuarios a presentar en Java

Publicado 81 artículos originales · ganado elogios 6 · vistas 2274

Supongo que te gusta

Origin blog.csdn.net/qq_16927853/article/details/104892386
Recomendado
Clasificación