当前位置: 首页剑指offer刷题第六期问题详情 【动态规划专题】LeetCode 64. 最小路径和 本问题对应课程链接:剑指offer刷题第六期 要求: 1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。 2、给出你代码所用的时间复杂度和空间复杂度
共以下 14 个回答
class Solution {
public int minPathSum(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
}
时间:O(mn)
空间:O(mn)
动态规划,找关联关系,结果值和初始值;注意初始值
class Solution {>& grid) { > (rows, vector (columns));
public:
int minPathSum(vector<vector
if (grid.size() 0 || grid[0].size() 0) {
return 0;
}
int rows = grid.size(), columns = grid[0].size();
auto dp = vector < vector
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] = min(dp[i – 1][j], dp[i][j – 1]) + grid[i][j];
}
}
return dp[rows – 1][columns – 1];
}
};
打卡
时间复杂度:O(mn)
空间复杂度:O(mn)
class Solution {>& grid) {
public:
int minPathSum(vector<vector
//细分边界,一一讨论
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(i0&& j0) continue;
else if(i0) grid[i][j] = grid[i][j-1] + grid[i][j];
else if(j0) grid[i][j] = grid[i-1][j] + grid[i][j];
else grid[i][j] = min(grid[i-1][j],grid[i][j-1]) + grid[i][j];
}
}
return grid[grid.size()-1][grid[0].size()-1];
}
};
时间复杂度O(mn),空间复杂度O(1)
两个版本:
“`C++>& grid) {> dp(m, vector (n, 0) );
class Solution {
public:
int minPathSum(vector
int m = grid.size();
int n = grid[0].size();
vector
};>& grid) {
/******************************************************************/
class Solution {
public:
int minPathSum(vector<vector
for(int i = 0; i < grid.size(); i++)
{
for(int j = 0; j < grid[0].size(); j++)
{
if(i 0 && j 0)
{
continue;
}
else if(i 0)
{
grid[i][j] = grid[i][j – 1] + grid[i][j];
}
else if(j 0)
{
grid[i][j] = grid[i – 1][j] + grid[i][j];
}
else
{
grid[i][j] = min(grid[i – 1][j], grid[i][j – 1]) + grid[i][j];
}
}
}
return grid[grid.size() – 1][grid[0].size() – 1];
}
};
“`
打卡
时间复杂度$O(mn)$,空间复杂度因为用原来数组为O(1),但是还是太慢
时间复杂度:O(mn)
空间复杂度:O(n)
“`c++>& grid) { dp(col, 0);
class Solution {
public:
int minPathSum(vector
int row = grid.size(), col = grid[0].size();
vector
dp[0] = grid[0][0];
for (int j=1; j
class Solution {
public int minPathSum(int[][] grid) {
for(int i = 0; i < grid.length; i++)
for(int j = 0; j < grid[0].length; j++){
if(i 0 && j 0)
continue;
else if(i 0)
grid[i][j] = grid[i][j-1] + grid[i][j];
else if(j 0)
grid[i][j] = grid[i-1][j] + grid[i][j];
else
grid[i][j] = Math.min(grid[i-1][j],grid[i][j-1]) + grid[i][j];
}
return grid[grid.length-1][grid[0].length-1];
}
}
//时间复杂度O(nm)
//空间复杂度O(1)