代码随想录Day33 LeetCode T62不同路径 LeetCode T63 不同路径II

前言

动规五部曲

1.确定dp数组含义

2.确定递推公式

3.初始化数组

4.确定遍历方式

5.打印dp数组查看分析问题

LeetCode T62 不同路径

题目链接:62. 不同路径 - 力扣(LeetCode)

题目思路:

注:n行m列而不是m行n列

1.确定dp数组含义

代表到达此下标有多少条路径

2.确定递推公式

因为只能向右或者向下走,所以到达i,j这个点的路径只有从左边和从上面到达,所以到达这个的途径数就是左边的数和上面的数之和.

java 复制代码
dp[i][j] = dp[i-1][j] + dp[i][j-1];

3.初始化数组

初始化的时候应该将左边边界和上面边界都初始化为1,因为只有一条路径能到达

java 复制代码
        for(int i = 0;i<m;i++){
            dp[i][0] = 1;
        }
        for(int i = 0;i<n;i++){
            dp[0][i] = 1;
        }

4.确定遍历方式

此题目跟遍历顺序无关,顺序遍历即可

5.打印dp数组查看分析问题

遇见问题可以打印dp数组并推导尝试是否有问题

最后直接返回右下角的值即可

题目代码:

java 复制代码
class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];
        for(int i = 0;i<m;i++){
            dp[i][0] = 1;
        }
        for(int i = 0;i<n;i++){
            dp[0][i] = 1;
        }
//记得从下标1,1开始哦,不然就越界了
        for(int i = 1;i<m;i++){
            for(int j = 1;j<n;j++){
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
    }
}

LeetCode T63 不同路径II

题目链接:63. 不同路径 II - 力扣(LeetCode)

题目思路:

1.确定dp数组含义

此时的dp数组也是代表和上一题一样的含义,表示有多少条路径能到达这个坐标

2.确定递推公式

注:这里如果遇到障碍,也就是1的情况,我们就让dp这个点取得0,不然就是和上文一样的递推公式

java 复制代码
dp[i][j] = (obstacleGrid[i][j] == 0)?dp[i-1][j] + dp[i][j-1]:0;

3.初始化数组

这里初始化在边界遇到障碍的时候就是代表后面的下标都是到达不了的地方,所以就不进行赋值

注意:如果起点或者终点为障碍,就直接返回0

4.确定遍历方式

顺序遍历即可

5.打印dp数组查看分析问题

题目代码:

java 复制代码
class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];
        //起点和终点为障碍
        if(obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1){
            return 0;
        }
        for(int i = 0;i<m && obstacleGrid[i][0] == 0;i++){
            dp[i][0] = 1;
        }
        for(int i = 0;i<n && obstacleGrid[0][i] == 0;i++){
            dp[0][i] = 1;
        }
        for(int i = 1;i<m;i++){
            for(int j = 1;j<n;j++){
                dp[i][j] = (obstacleGrid[i][j] == 0)?dp[i-1][j] + dp[i][j-1]:0;
            }
        }
        return dp[m-1][n-1];

    }
}
相关推荐
大明者省6 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
白狐_7987 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2587 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
Shell运维手记8 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
杨航 AI8 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型9 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光9 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
叠层归一研究院10 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
zlinear数据采集卡11 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
城管不管11 小时前
重生——第九次面试2026.8.13某车一面
分布式·ai·面试·职场和发展·rabbitmq