zoukankan      html  css  js  c++  java
  • 矩阵的最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

    说明:每次只能向下或者向右移动一步。

    示例:

    输入:
    [
      [1,3,1],
    [1,5,1],
    [4,2,1]
    ]
    输出: 7
    解释: 因为路径 1→3→1→1→1 的总和最小。

    二维dp:

     1     public int minPathSum(int[][] grid) {
     2         if (grid == null || grid.length == 0 || grid[0].length == 0) {
     3             return 0;
     4         }
     5         int m = grid.length, n = grid[0].length;
     6         int[][] dp = new int[m][n];
     7         dp[0][0] = grid[0][0];
     8         for (int i = 0; i < m; i++) {
     9             for (int j = 0; j < n; j++) {
    10                 if (i == 0 && j != 0) {
    11                     dp[0][j] = dp[0][j - 1] + grid[i][j];
    12                 } else if (i != 0 && j == 0) {
    13                     dp[i][0] = dp[i][i - 1] + grid[i][j];
    14                 } else if (i != 0 && j != 0) {
    15                     dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
    16                 } else {
    17                     dp[i][j] = grid[i][j];
    18                 }
    19             }
    20         }
    21         return dp[m - 1][n - 1];
    22     }

     一维dp:

     1 public class T64 {
     2     public int minPathSum(int[][] grid) {
     3         if (grid == null || grid.length == 0 || grid[0].length == 0) {
     4             return 0;
     5         }
     6         int m = grid.length,n = grid[0].length;
     7         int[] dp = new int[n];
     8         for (int i = 0; i < m; i++) {
     9             for (int j = 0; j < n; j++) {
    10                 if (i == 0 && j != 0) {
    11                     dp[j] = dp[j - 1];
    12                 } else if (i != 0 && j == 0) {
    13                     dp[j] = dp[j];
    14                 } else if (i != 0 && j != 0) {
    15                     dp[j] = Math.min(dp[j - 1], dp[j]);
    16                 } else {
    17                     dp[j] = 0;
    18                 }
    19                 dp[j] = dp[j] + grid[i][j];
    20             }
    21         }
    22         return dp[n - 1];
    23     }
    24 }
    一回生,二回熟
  • 相关阅读:
    java环境变量配置(Windows & Linux)
    转行自学编程的前提条件和能力
    IntelliJ IDEA 视频教程
    小孩都懂得用“头衔”来包装自己了,那么你呢?
    自创“乒乓球自嗨玩法”
    什么是npm以及npm基本命令
    hexo本地搭建以及在github远程部署
    如何下载Java-配置环境全教程
    图的存储结构以及遍历
    二叉树的存储结构以及遍历
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12446577.html
Copyright © 2011-2022 走看看