动态规划—最小路径和
生活随笔
收集整理的這篇文章主要介紹了
动态规划—最小路径和
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述:給定一個包含非負整數的?m?x?n?網格?grid?,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。每次只能向下或者向右移動一步。
算法思路:
采用動態規劃,將上述矩陣轉為下面的矩陣,狀態轉移方程為:dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
class Solution {public int minPathSum(int[][] grid) {if (grid == null || grid.length == 0 || grid[0].length == 0) {return 0;}int rows = grid.length, columns = grid[0].length;int[][] dp = new int[rows][columns];dp[0][0] = grid[0][0];for (int i = 1; i < rows; i++) {dp[i][0] = dp[i - 1][0] + grid[i][0];}for (int j = 1; j < columns; j++) {dp[0][j] = dp[0][j - 1] + grid[0][j];}for (int i = 1; i < rows; i++) {for (int j = 1; j < columns; j++) {dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];}}return dp[rows - 1][columns - 1];} }總結
以上是生活随笔為你收集整理的动态规划—最小路径和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划—最长公共子序列
- 下一篇: 动态规划—编辑距离