力扣HOT100之多维动态规划:62. 不同路径

这道题用二维dp数组来做相当简单,是一道入门题。直接上动规五部曲:

1.确定dp[i][j]的含义:从起点到位置为[i][j]处的路径总数

2.确定递推公式 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];

3.dp数组初始化 dp[0][j] = 1;dp[i][0] = 1;

4.确定遍历顺序:从左往右,从上往下遍历

5.打印数组(省略)

由于机器人每一次只能向右或者向下移动,不存在走弯路的情况,从地图的左上角走到右下角,每一步都是有效的,不是无用功。到达(i, j)处有两种方式:一种是先设法到达(i - 1, j)处,然后再向下走一步;第二种是先设法到达(i, j - 1)处,然后再向右走一步。因此到达(i, j)处的路径数总是等于到达(i - 1, j)处的路径总数与到达(i, j - 1)处的路径总数之和。

cpp 复制代码
class Solution {
public:
    int uniquePaths(int m, int n) {
        //1.确定dp[i][j]的含义:从起点到位置为[i][j]处的路径总数
        //2.确定递推公式  dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
        //3.dp数组初始化 dp[0][j] = 1;dp[i][0] = 1;
        //4.确定遍历顺序:从左往右,从上往下遍历
        //5.打印数组(省略)
        vector<vector<int>> dp(m, vector<int>(n, 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];
    }
};
相关推荐
故事和你911 分钟前
洛谷-【动态规划2】线性状态动态规划4
开发语言·数据结构·c++·算法·动态规划·图论
不吃土豆的马铃薯4 分钟前
Socket 网络编程实战教程
linux·服务器·开发语言·网络·c++·算法
weixin_468466851 小时前
图像滤波算法新手实战指南
图像处理·人工智能·算法·计算机视觉·ai·机器视觉·滤波
Ulyanov1 小时前
深入QML-Python通信 构建响应式交互界面的桥梁设计:QML+PySide6现代开发入门(五)
开发语言·python·算法·交互·qml·系统仿真
重生之我是Java开发战士1 小时前
【贪心算法】加油站,单调递增的数字,坏了的计算器,合并区间,用最少数量的箭引爆气球
算法·贪心算法
小欣加油1 小时前
leetcode 3300 替换为数位和后的最小元素
数据结构·c++·算法·leetcode
晚风予卿云月1 小时前
【枚举】普通枚举
数据结构·c++·算法·竞赛·算法随笔
IronMurphy1 小时前
【算法五十三】1143. 最长公共子序列
算法
被AI抢饭碗的人1 小时前
算法:动态规划
算法
妄想出头的工业炼药师1 小时前
激光雷达点云退化多地图会话
算法·开源