力扣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];
    }
};
相关推荐
haluhalu.3 分钟前
prompts.chat:07-few-shot-prompting
人工智能·算法
Jerry13 分钟前
LeetCode 150. 逆波兰表达式求值
算法
浩瀚地学19 分钟前
【面试算法笔记】0106-数组-区间和
笔记·算法·面试
Jerry6 小时前
LeetCode 1047. 删除字符串中的所有相邻重复项
算法
可编程芯片开发8 小时前
基于霍尔传感器和PID控制器的有功功率检测控制系统simulink建模与仿真
算法
To_OC8 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
战族狼魂11 小时前
GPT-5.6与Grok 4.5重磅发布
人工智能·算法·大模型·大语言模型
白日焰火111 小时前
基于 OpenSpec 实现规范驱动开发
算法·交互
imuliuliang12 小时前
关于图搜索算法的性能建模与可预测性研究7
算法
ForDreamMusk13 小时前
批量归一化
人工智能·算法·机器学习