题解 | #三角形最小路径和#

三角形最小路径和

https://www.nowcoder.com/practice/c9d44b73dc7c4dbfa4272224b1f9b42c

总结:
使用动态规划解决,空间复杂度可以优化,从n^2,2n,n。参考如下:
https://leetcode.cn/problems/triangle/solution/san-jiao-xing-zui-xiao-lu-jing-he-by-leetcode-solu/

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param triangle int整型二维数组 
     * @return int整型
     */
    public int minTrace (int[][] triangle) {
        // write code here
        //方法一使用空间n^2
//         int n = triangle.length;
//         int[][] dp = new int[n][n];
//         dp[0][0] = triangle[0][0];
//         for(int i=1;i<n;i++){
//             for(int j=0;j<=i;j++){
//                 if(j==0)
//                     dp[i][j]=dp[i-1][j]+triangle[i][j];
//                 else if(j==i)
//                     dp[i][j] = dp[i][j-1]+triangle[i][j];
//                 else
//                     dp[i][j] = Math.min(dp[i-1][j],dp[i-1][j-1])+triangle[i][j];
//             }
//         }
//         int min = dp[n-1][0];
//         for(int i=1;i<n;i++)
//             min = Math.min(min,dp[n-1][i]);
//         return min;
        //方法二 空间复杂度2n
//         int n = triangle.length;
//         int[][] f = new int[2][n];
//         f[0][0] = triangle[0][0];
//         int index = 0;
//         for(int i=1;i<n;i++)
//             for(int j=0;j<=i;j++){
//                 if((i&1)==1)
//                     index = 1;
//                 else
//                     index = 0;
//                 if(j==0)
//                     f[index][j] = f[1-index][j]+triangle[i][j];
//                 else if(j==i)
//                     f[index][j] = f[1-index][j-1]+triangle[i][j];
//                 else
//                     f[index][j] = Math.min(f[1-index][j],f[1-index][j-1])+triangle[i][j];

//             }
//         if(((n-1)&1)==0)
//             index = 0;
//         else 
//             index = 1;
//         int min = f[index][0];
//         for(int i=1;i<n;i++)
//             min = Math.min(min,f[index][i]);
//         return min;
        //方法三 空间复杂度n
        int n = triangle.length;
        int[] f= new int[n];
        f[0] = triangle[0][0];
        for(int i=1;i<n;i++)
            for(int j=i;j>=0;j--){
                if(j==0)
                    f[j] = f[j]+triangle[i][j];
                else if(j==i)
                    f[j] = f[j-1]+triangle[i][j];
                else
                    f[j] = Math.min(f[j],f[j-1])+triangle[i][j];
            }
        int min = f[0];
        for(int i=1;i<n;i++){
            min = Math.min(min,f[i]);
        }
        return min;

    }
}
全部评论

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务