力扣 62. 不同路径

这篇具有很好参考价值的文章主要介绍了力扣 62. 不同路径。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目来源:https://leetcode.cn/problems/unique-paths/

力扣 62. 不同路径,开始C++吧,leetcode,算法,c++,动态规划,数论方法

力扣 62. 不同路径,开始C++吧,leetcode,算法,c++,动态规划,数论方法 

C++题解1:动态规划。声明二维数组。

  1. 确定dp数组(dp table)以及下标的含义。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
  2. 确定递推公式。想要求 dp[i][j] ,只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。
  3. dp数组的初始化。dp[0][0] = 1.
  4. 确定遍历顺序。这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。推导dp[i][j]的时候,要保证dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。
  5. 举例推导dp数组。
class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int> > dp(m, vector<int>(n, 0));
        dp[0][0] = 1;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++){
                if(i-1 >= 0) dp[i][j] += dp[i-1][j];
                if(j-1 >= 0) dp[i][j] += dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
    }
};

代码随想录 写法:先初始化第一行和第一列。

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

C++题解2(来源代码随想录):用数论的思想。m行n列的话,无论怎么走,走到终点都需要 m + n - 2 步。在这m + n - 2 步中,一定有 m - 1 步是要向下走的,不用管什么时候向下走。那么有几种走法呢? 可以转化为,给你m + n - 2个不同的数,随便取m - 1个数,有几种取法。即力扣 62. 不同路径,开始C++吧,leetcode,算法,c++,动态规划,数论方法

求组合的时候,要防止两个int相乘溢出! 所以不能把算式的分子都算出来,分母都算出来再做除法。文章来源地址https://www.toymoban.com/news/detail-625392.html

class Solution {
public:
    int uniquePaths(int m, int n) {
        long long numerator = 1; // 分子
        int denominator = m - 1; // 分母
        int count = m - 1;
        int t = m + n - 2;
        while (count--) {
            numerator *= (t--);
            while (denominator != 0 && numerator % denominator == 0) {
                numerator /= denominator;
                denominator--;
            }
        }
        return numerator;
    }
};

到了这里,关于力扣 62. 不同路径的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动态规划 Leetcode 62 不同路径

    Leetcode 62 学习记录自代码随想录 要点:1.二维表格,想到(i,j)去代表其坐标,dp数组也因此为二维数组; 2.递推公式 d p [ i ] [ j ] dp[i][j] d p [ i ] [ j ] 的上一步只能是其左边或上边,所以 d p [ i ] [ j ] = d p [ i − 1 ] [ j ] + d p [ i ] [ j − 1 ] dp[i][j]=dp[i-1][j]+dp[i][j-1] d p [ i ] [ j ] =

    2024年03月13日
    浏览(43)
  • 【算法与数据结构】62、LeetCode不同路径

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :机器人只能向下或者向右移动,那么到达(i,j)位置的路径和(i-1,j)以及(i,j-1)有关。那么我们就得到的动态规划的表达式 d p [ i ] [ j ] = d p [ i − 1 ] [ j ] + d p [ i ] [ j − 1 ] dp[i][

    2024年01月18日
    浏览(68)
  • 算法leetcode|62. 不同路径(rust重拳出击)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 1 = m, n = 100 题目数据保证答案小于等于 2 * 10 9 面对这道算法

    2024年02月17日
    浏览(47)
  • 算法训练Day39:62.不同路径 63. 不同路径 II 动态规划

    Category Difficulty Likes Dislikes ContestSlug ProblemIndex Score algorithms Medium (67.70%) 1746 0 - - 0 Tags Companies 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

    2023年04月25日
    浏览(45)
  • 算法D39 | 动态规划2 | 62.不同路径 63. 不同路径 II

    今天开始逐渐有 dp的感觉了,题目不多,就两个 不同路径,可以好好研究一下 62.不同路径  本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。  代码随想录 视频讲解: 动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_bilibili 这个题看

    2024年04月10日
    浏览(45)
  • 力扣 -- 62.不同路径、63.不同路径2

      题目链接:64. 最小路径和 - 力扣(LeetCode) 63. 不同路径 II - 力扣(LeetCode) 以下是用动态规划的思想来解决这两道类似的动规的题目,相信各位老铁都是能够学会并且掌握这两道经典的题目的。 参考代码: 第一题: 第二题、 以上就是分析这两道dp题目的整个过程啦,你

    2024年02月15日
    浏览(43)
  • 力扣 62. 不同路径

    题目来源:https://leetcode.cn/problems/unique-paths/   C++题解1:动态规划。声明二维数组。 确定dp数组(dp table)以及下标的含义。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。 确定递推公式。想要求 dp[i][j] ,只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j -

    2024年02月14日
    浏览(38)
  • 不同路径——力扣62

    题目描述 解法一 动态规划

    2024年02月12日
    浏览(33)
  • 算法刷刷刷|动态规划篇|509.斐波那契数| 70.爬楼梯| 746.使用最小花费爬楼梯| 62.不同路径| 63不同路径2| 343.正数拆分 | 96.不同的二叉搜索树

    509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n 1 给定 n ,请计算 F(n) 。 70.爬楼梯 746.使用最小花费爬楼梯 给你一个整数

    2023年04月23日
    浏览(57)
  • 【Leetcode】62.不同路径

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例1: 示例2: 示例3: 示例4: 提示: 1 = m, n = 100 题目数

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包