Leetcode-120. Suma de ruta mínima triangular (programación dinámica)

120. Suma de trayectoria mínima triangular (programación dinámica)

120. Ruta mínima de triángulo y
enlace al tema: https://leetcode-cn.com/problems/triangle/

Método uno: de arriba hacia abajo

Es la primera vez que hago un problema de programación dinámica por mí mismo. ¡Estoy un poco feliz! !
Esta es la primera vez que hice un plan dinámico de forma independiente, pero desafortunadamente agregué un Math.max por primera vez sin un pase

Inserte la descripción de la imagen aquí

class Solution {
    
    
       public int minimumTotal(List<List<Integer>> triangle) {
    
    
        int lenX=triangle.get(triangle.size()-1).size();
        int boo[][]=new int[lenX][lenX];
        int min=Integer.MAX_VALUE;
        int dp[][]=new int[lenX][lenX];
        dp[0][0]=triangle.get(0).get(0);
        for(int i=0;i<triangle.size()-1;i++){
    
    
            int lenx=triangle.get(i).size();
            for (int j = 0; j <lenx; j++) {
    
    
                if ( boo[i+1][j]!=1) {
    
    
                    dp[i + 1][j] = triangle.get(i + 1).get(j) + dp[i][j];
                    boo[i + 1][j] = 1;
                }else {
    
    
                    dp[i + 1][j] = Math.min(triangle.get(i + 1).get(j) + dp[i][j], dp[i + 1][j]);
                }
                if (boo[i+1][j+1]!=1) {
    
    
                    dp[i + 1][j + 1] =triangle.get(i + 1).get(j + 1) + dp[i][j];
                    boo[i + 1][j + 1] = 1;
                }else {
    
    
                    dp[i + 1][j] = Math.min(triangle.get(i + 1).get(j) + dp[i][j], dp[i + 1][j]);
                }

            }
        }
         for (int j=0;j<dp[dp.length-1].length;j++){
    
    
            min=Math.min(min,dp[dp.length-1][j]);
         }

         return min;
    }
}

Método 2: de abajo hacia arriba

Echemos un vistazo al código ascendente escrito por el grandullón. Después de leerlo, realmente grité WoCao. Es tan sutil que lloré por él.

class Solution {
    
    
    public int minimumTotal(List<List<Integer>> triangle) {
    
    
        int n = triangle.size();
        // dp[i][j] 表示从点 (i, j) 到底边的最小路径和。
        int[][] dp = new int[n + 1][n + 1];
        // 从三角形的最后一行开始递推。
        for (int i = n - 1; i >= 0; i--) {
    
    
            for (int j = 0; j <= i; j++) {
    
    
                dp[i][j] = Math.min(dp[i + 1][j], dp[i + 1][j + 1]) + triangle.get(i).get(j);
            }
        }
        return dp[0][0];
    }
}

Autor: sweetiee
Código de: sweet tía
https://leetcode-cn.com/problems/triangle/solution/di-gui-ji-yi-hua-dp-bi-xu-miao-dong-by-sweetiee/


Actualizando continuamente ...

Supongo que te gusta

Origin blog.csdn.net/weixin_44325444/article/details/107333265
Recomendado
Clasificación