代码随想录算法训练营 动态规划part02

一、不同路径

62. 不同路径 - 力扣(LeetCode)

我们令 dp[i][j] 是到达 i, j 最多路径

动态方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]

注意,对于第一行 dp[0][j],或者第一列 dp[i][0],由于都是在边界,所以只能为 1

优化:因为我们每次只需要 dp[i-1][j],dp[i][j-1],所以我们只要记录这两个数。

class Solution {
    public int uniquePaths(int m, int n) {
        int[] cur = new int[n];
        Arrays.fill(cur,1);
        for (int i = 1; i < m;i++){
            for (int j = 1; j < n; j++){
                cur[j] += cur[j-1] ;
            }
        }
        return cur[n-1];
    }
}

二、不同路径 II

63. 不同路径 II - 力扣(LeetCode)

看题解63. 不同路径 II - 力扣(LeetCode)

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int n = obstacleGrid.length;
        int m = obstacleGrid[0].length;
        int[][] dp = new int[n][m];
        //(0,0)这个格子可能有障碍物
        dp[0][0] = (obstacleGrid[0][0] == 1) ? 0 : 1;
        //处理第一列
        for(int i = 1; i < n; ++i) {
            if(obstacleGrid[i][0] == 1 || dp[i - 1][0] == 0) {
                dp[i][0] = 0;
            } else {
                dp[i][0] = 1;
            }
        }
        //处理第一行
        for(int j = 1; j < m; ++j) {
            if(obstacleGrid[0][j] == 1 || dp[0][j - 1] == 0) {
                dp[0][j] = 0;
            } else {
                dp[0][j] = 1;
            }
        }
        for(int i = 1; i < n; ++i) {
            for(int j = 1; j < m; ++j) {
                 //如果当前格子是障碍物
                if(obstacleGrid[i][j] == 1) {
                    dp[i][j] = 0;
                //路径总数来自于上方(dp[i-1][j])和左方(dp[i][j-1])    
                } else {
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        return dp[n - 1][m - 1];
    }
}
相关推荐
AI技术控5 分钟前
计算机视觉算法实战——昆虫识别检测(主页有源码)
人工智能·算法·计算机视觉
西猫雷婶1 小时前
python学智能算法(七)|KNN邻近算法
算法
用户9080321969251 小时前
OpenCV三大经典项目实战 掌握计算机视觉核心技能-|果fx
算法
Vitalia1 小时前
⭐算法OJ⭐经典题目分类索引(持续更新)
算法
Alchemist011 小时前
算法笔记
算法
请来次降维打击!!!2 小时前
算法优选系列(1.双指针_下)
c++·算法
汤姆和佩琦2 小时前
LLMs基础学习(一)概念、模型分类、主流开源框架介绍以及模型的预训练任务
人工智能·学习·算法·分类·数据挖掘
zhulangfly2 小时前
机器学习算法分类及应用场景全解析
算法·机器学习·分类
Coovally AI模型快速验证2 小时前
DeepSeek引领端侧AI革命,边缘智能重构AI价值金字塔
人工智能·算法·目标检测·计算机视觉·边缘计算·deepseek
熊峰峰2 小时前
数据结构第六节:二叉搜索树(BST)的基本操作与实现
开发语言·数据结构·c++·算法