不同路径(LeetCode-62)

简介: 不同路径(LeetCode-62)

4. 不同路径(LeetCode-62)


题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。


机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。


问总共有多少条不同的路径?


示例 1:



输入:m = 3, n = 7
输出:28


示例 2:

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下


示例 3:

输入:m = 7, n = 3
输出:28


示例 4:

输入:m = 3, n = 3
输出:6


提示:

1 <= m, n <= 100

题目数据保证答案小于等于 2 * 109


思路

五部曲继续


dp[m][n] 含义:到达m行n列有 dp[m][n] 条路径


机器人每次只能向下或向右移动,所以该点路径条数只与它上面和左边的点有关,是它们路径条数之和

d p [ m ] [ n ] = d p [ m − 1 ] [ n ] + d p [ m ] [ n − 1 ]


初始化时,最左边一列和最上面一行的值肯定为1


要先有 − 1 -1−1 才能有你,肯定正序



代码展示

class Solution
{
public:
    int uniquePaths(int m, int n)
    {
        vector<vector<int>> dp(m, vector<int>(n));
        for (int i = 0; i < m; i++)
        {
            dp[i][0] = 1;
        }
        for (int i = 0; i < n; i++)
        {
            dp[0][i] = 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];
    }
};


可以滚动数组优化,可以看出,我们计算是以行为单位一行一行计算的,其实该点值只和它上一行有关,所以创建一个长度为网格列数的数组

d p [ j ] = d p [ j ] + d p [ j − 1 ]


dp[j-1] 最初是欲计算点上左侧的值,被计算后,数值的含义下移,变成欲计算点左侧的值。同理 dp[j] 在计算之前代表欲计算点上侧的值

class Solution
{
public:
    int uniquePaths(int m, int n)
    {
        vector<int> dp(n);
        for (int i = 0; i < n; i++)
        {
            dp[i] = 1;
        }
        for (int i = 1; i < m; i++)
        {
            for (int j = 1; j < n; j++)
            {
                dp[j] = dp[j] + dp[j - 1];
            }
        }
        return dp[n - 1];
    }
};
目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 数据中心
大模型时代的底牌:深度解密英伟达全架构GPU指令集、带宽与物理封锁
本文深度解析英伟达全系GPU在大模型时代的定位与价值:从Blackwell(RTX 50/B200)到Pascal(1080 Ti/P40),横跨六大架构,聚焦算力、显存、NVLink、指令集四大维度,揭秘“刀法”逻辑与极客实战策略,堪称本地LLM硬件选型终极指南。(239字)
1006 6
|
Java
java学习第七天笔记-方法132-综合练习-评委打分思路分析
java学习第七天笔记-方法132-综合练习-评委打分思路分析
253 0
java学习第七天笔记-方法132-综合练习-评委打分思路分析
|
开发者
猪八戒版骨架记忆法|学习笔记
快速学习猪八戒版骨架记忆法
143 0
猪八戒版骨架记忆法|学习笔记
|
JSON 前端开发 JavaScript
我写小程序像菜虚鲲——2、🐔你太美(上)
节内容比较简单,学习流程如下,读者根据自己的层次按需学习: 📚学一学:几分钟速成前端三剑客(HTML,CSS和JavaScript)的基本语法。 🆚比一比:从HTML、CSS无痕过渡到微信小程序的WXML、WXSS。 🐱瞄一瞄:微信小程序都提供了哪些组件。 🔥搞一搞:控制组件隐藏显示两种方法:block wx:if VS hidden属性。 🚀爽一爽:重复代码抽模板template/组件component,哪里用到哪里导。 🌝皮一皮:反编译别人的小程序,学(chao)习(xi)下组件怎么堆。
503 0
|
机器学习/深度学习
技术打开感知世界:当感官数字化,会发生什么?
来自日本明治大学的教授宫下芳明(Homei Miyashita)研发了一种发电筷子,在用餐时,通过使用这个筷子装置,可以不用额外增加食盐的前提下,尝到咸味。
495 0
技术打开感知世界:当感官数字化,会发生什么?
|
存储
1. 两数之和
1. 两数之和
143 0
|
开发者
猪八戒版骨架记忆法|学习笔记
快速学习猪八戒版骨架记忆法
猪八戒版骨架记忆法|学习笔记
|
存储 运维 安全
Elasticsearch入门-1
Elasticsearch入门-1
705 0
Elasticsearch入门-1
|
Java
Java 类的方法总结-目前网上最完整9种方法总结
Java 类的方法总结-目前网上最完整9种方法总结
4604 0
|
Web App开发 JavaScript 前端开发