Medium!

题目描述:

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

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

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

例如,上图是一个7 x 3 的网格。有多少可能的路径?

说明:m 和 的值均不超过 100。

示例 1:

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

示例 2:

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

解题思路:

这道题是每次可以向下走或者向右走,求到达最右下角的所有不同走法的个数。我们需要用动态规划Dynamic Programming来解,我们可以维护一个二维数组dp,其中dp[i][j]表示到当前位置不同的走法的个数,然后可以得到递推式为: dp[i][j] = dp[i - 1][j] + dp[i][j - 1],这里为了节省空间,我们使用一维数组dp,一行一行的刷新也可以。

C++解法一:

 1 // DP
 2 class Solution {
 3 public:
 4     int uniquePaths(int m, int n) {
 5         vector<int> dp(n, 1);
 6         for (int i = 1; i < m; ++i) {
 7             for (int j = 1; j < n; ++j) {
 8                 dp[j] += dp[j - 1];
 9             }
10         }
11         return dp[n - 1];
12     }
13 };

其实还有另一种很数学的解法,参见https://blog.csdn.net/linhuanmars/article/details/22126357

实际相当于机器人总共走了m + n - 2步,其中m - 1步向下走,n - 1步向右走,那么总共不同的方法个数就相当于在步数里面m - 1和n - 1中较小的那个数的取法,实际上是一道组合数的问题。

C++解法二:

 1 class Solution {
 2 public:
 3     int uniquePaths(int m, int n) {
 4         double num = 1, denom = 1;
 5         int small = m > n ? n : m;
 6         for (int i = 1; i <= small - 1; ++i) {
 7             num *= m + n - 1 - i;
 8             denom *= i;
 9         }
10         return (int)(num / denom);
11     }
12 };

转载于:https://www.cnblogs.com/ariel-dreamland/p/9149761.html

LeetCode(62):不同路径相关推荐

  1. leetcode - 62. 不同路径

    62. 不同路径 --------------------------------------------一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start&q ...

  2. 91. Leetcode 62. 不同路径 (动态规划-路径规划)

    步骤一.确定状态: 确定dp数组及含义 dp[i][j]表示从左上角到第i行j列这个位置的路径条数 步骤二.推断状态方程: dp[i][j] = dp[i - 1][j] + dp[i][j - 1] ...

  3. Leetcode 62.不同路径 (每日一题 20210701)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 " ...

  4. leetcode 62 不同路径

    动态规划 机器人从(0 , 0) 位置触发,到(m - 1, n - 1)终点. 按照动规五部曲来分析: 确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到 ...

  5. leetcode 62. 不同路径(dp)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为" ...

  6. LeetCode 62.不同路径(动态规划)

    题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为& ...

  7. [leetcode]62. 不同路径

    DFS:肯定是超时了啊 class Solution {int dx[2] = {1, 0};int dy[2] = {0, 1};int res = 0;int m;int n;void dfs(i ...

  8. 跟我打卡LeetCode 61旋转链表62不同路径63不同路径 II

    原创公众号:bigsai 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 49字母异位词分组&50pow(x,n)&51八皇后 LeetCode打卡 52八皇 ...

  9. LeetCode 64最小路径和65有效数字66加一

    原创公众号:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode打卡 52八皇后Ⅱ&53最大子序和& ...

  10. LeetCode.M62.不同路径

    LeetCode.M62.不同路径 题目: 题目大意: ​ 给定一个 m * n 的方格,从 (0, 0) 走到 (m - 1, n - 1).规定只能**向下.向右 ** 数据范围: 1 <= ...

最新文章

  1. floodFill函数
  2. Intel Realsense D435 composite_frame类 frame类 video_frame类 depth_frame类的关系
  3. nbu还原oracle,NBU恢复oracle
  4. 树莓派 - 设置只读文件系统,避免分区错误
  5. 在linux下如何进行mysql命令行 创建数据库
  6. 2021抚顺高考成绩查询,2021年抚顺高考成绩排名及成绩公布时间什么时候出来
  7. oracle trace跟踪,浅析Oracle追踪工具SQL Trace的启用方式
  8. python--httplib模块使用
  9. Wolfram Mathematica 13 for Mac(功能强大的科学计算软件)
  10. 最新Java面试题,常见面试题及答案汇总
  11. RK系列SDK -- i2s mclk 无输出
  12. oracle任务间隔,Oracle定时任务时间间隔
  13. A*求解带时间窗的路径规划问题
  14. navigator、history对象
  15. 工业循环水浅层砂过滤器(励进浅层介质过滤器)介绍及现场案例图
  16. 平头哥RVB2601板子上手——ADC采集与CSI
  17. MapReduce中加强内容
  18. 互联网公司的年会也太太太刺激了吧!
  19. nodejs+vue+mysql的高校二手跳蚤市场交易网站express
  20. 【Spring学习】过滤器和拦截器

热门文章

  1. 你赞同企业年薪百万的高管对员工说别羡慕赚的多,人家加班和付出的时候你在玩的说法吗?
  2. 高中生住校好还是走读好?为什么?
  3. 旅游中用稳定器和相机拍视频是怎样的体验?
  4. HRBP与HRM的区别是什么?
  5. 这个世界上不存在什么弯道超车,只存在正道超车
  6. 接待顾客接待久了,发现大家讨价还价的方式基本三种
  7. 我们的内存中都放了什么
  8. 为什么Mate40Pro没有OIS光学防抖?
  9. 何时使用 Golang
  10. 为什么有的安卓手机会越用越卡?