31 动态规划和递归解最小路径和

问题描述:给定一个包含非负整数的m×n网格,请找出一条从左上角到右下角的路径,使得路径上的数字综合为最小;

递归求解思路:每一个递归函数都可以向下和向右两种,在进行判断时需要进行判断越界问题,在到达最后一格的时候,加入PriorityQueue minHeap的最小堆中,最后返回最小堆中的元素。

public void getMinPath(int [][]matrix,int rowIndex ,int columnIndex,int pathSum,PriorityQueue<Integer> minHeap)
{
if(rowIndex==matrix.length||columnIndex==matrix[0].length)
return;
if(rowIndex==matrix.length-1&&columnIndex==matrix[0].length-1)
{
minHeap.add(minHeap+matrix[rowIndex][columnIndex]);
return;
}
getMinPath(matrix,rowIndex+1,columnIndex,pathSum+matrix[rowIndex][columnIndex],minHeap);
getMinPath(matrix,rowIndex,columnIndex+1,pathSum+matrix[rowIndex][columnIndex],minHeap);

}
public int GetMinPath(int [][]matrix)
{
PriorityQueue<Integer>minHeap=new PriorityQueue<>();
getMinPath(matrix,0,0,0,minHeap);
return minHeap.poll();
}

动态规划求解,定义dp[i][j]表示从[0][0]到[i][j]的最小路径
 

public getMinPath(int [][]matrix)
{
int [][]dp=new int[matrix.length][matrix[0].length];
dp[0][0]=matrix[0][0];
for(int i=1;i<matrix.length;i++)
{
for(int j=1;j<matrix[i].length;j++)
{
dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+matrix[j][j];
}
}
return dp[matrix.length-1][matrix[0].length-1];
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 00:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 00:38:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 00:38:02       82 阅读
  4. Python语言-面向对象

    2023-12-18 00:38:02       91 阅读

热门阅读

  1. Meta Reinforce Learning 元学习:学会如何学习

    2023-12-18 00:38:02       65 阅读
  2. 【Python 千题 —— 基础篇】分割有效信息

    2023-12-18 00:38:02       70 阅读
  3. python排序

    2023-12-18 00:38:02       59 阅读
  4. 【代码随想录】算法训练计划51

    2023-12-18 00:38:02       67 阅读
  5. 04 开发第一个组件

    2023-12-18 00:38:02       55 阅读
  6. Js中数组的实用语法

    2023-12-18 00:38:02       57 阅读