LeetCode(62):不同路径
Medium!
题目描述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
例如,上图是一个7 x 3 的网格。有多少可能的路径?
说明:m 和 n 的值均不超过 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):不同路径相关推荐
- leetcode - 62. 不同路径
62. 不同路径 --------------------------------------------一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start&q ...
- 91. Leetcode 62. 不同路径 (动态规划-路径规划)
步骤一.确定状态: 确定dp数组及含义 dp[i][j]表示从左上角到第i行j列这个位置的路径条数 步骤二.推断状态方程: dp[i][j] = dp[i - 1][j] + dp[i][j - 1] ...
- Leetcode 62.不同路径 (每日一题 20210701)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 " ...
- leetcode 62 不同路径
动态规划 机器人从(0 , 0) 位置触发,到(m - 1, n - 1)终点. 按照动规五部曲来分析: 确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到 ...
- leetcode 62. 不同路径(dp)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为" ...
- LeetCode 62.不同路径(动态规划)
题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为& ...
- [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 ...
- 跟我打卡LeetCode 61旋转链表62不同路径63不同路径 II
原创公众号:bigsai 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 49字母异位词分组&50pow(x,n)&51八皇后 LeetCode打卡 52八皇 ...
- LeetCode 64最小路径和65有效数字66加一
原创公众号:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode打卡 52八皇后Ⅱ&53最大子序和& ...
- LeetCode.M62.不同路径
LeetCode.M62.不同路径 题目: 题目大意: 给定一个 m * n 的方格,从 (0, 0) 走到 (m - 1, n - 1).规定只能**向下.向右 ** 数据范围: 1 <= ...
最新文章
- floodFill函数
- Intel Realsense D435 composite_frame类 frame类 video_frame类 depth_frame类的关系
- nbu还原oracle,NBU恢复oracle
- 树莓派 - 设置只读文件系统,避免分区错误
- 在linux下如何进行mysql命令行 创建数据库
- 2021抚顺高考成绩查询,2021年抚顺高考成绩排名及成绩公布时间什么时候出来
- oracle trace跟踪,浅析Oracle追踪工具SQL Trace的启用方式
- python--httplib模块使用
- Wolfram Mathematica 13 for Mac(功能强大的科学计算软件)
- 最新Java面试题,常见面试题及答案汇总
- RK系列SDK -- i2s mclk 无输出
- oracle任务间隔,Oracle定时任务时间间隔
- A*求解带时间窗的路径规划问题
- navigator、history对象
- 工业循环水浅层砂过滤器(励进浅层介质过滤器)介绍及现场案例图
- 平头哥RVB2601板子上手——ADC采集与CSI
- MapReduce中加强内容
- 互联网公司的年会也太太太刺激了吧!
- nodejs+vue+mysql的高校二手跳蚤市场交易网站express
- 【Spring学习】过滤器和拦截器