LeetCode 62. 不同路径
程序员文章站
2022-03-05 19:14:49
...
题目内容
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 1:
输入:m = 3, n = 7
解题思路
递归方法:读题之后的第一判断是用递归来解决这个问题,但以暴力思想实现算法几乎都会中陷阱,Time Limit Error.
dp:本题内容其实与青蛙跳台阶问题没有差别,由题意知机器人只会向右与向下两个方向进行移动,可以得出dp公式dp(x,y)=dp(x-1,y)+dp(x,y-1);其中对于x=0与y=0的特殊坐标,进行一点特殊处理就可以。
公式方法:(无)????
解题代码
递归代码(超时):
class Solution {
public:
int uniquePaths(int m, int n) {
return d(m, n, 1, 1);
}
int d(int m, int n, int y, int x)
{
int sum = 0;
if (m == y)
return 1;
if (x == n)
return 1;
if (m > y)
sum += d(m, n, y + 1, x);
if (n > x)
sum += d(m, n, y, x + 1);
return sum;
}
};
dp代码:
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> t(m, vector<int>(n));
int i = 0;
while (i < m)
{
t[i][0]++;
i++;
}
int j = 0;
while (j < n)
{
t[0][j]++;
j++;
}
t[0][0] = 1;
i = 1;
while (i < m)
{
j = 1;
while (j < n)
{
t[i][j] = t[i - 1][j] + t[i][j - 1];
j++;
}
i++;
}
return t[m - 1][n - 1];
}
};
推荐阅读
-
leadcode的Hot100系列--62. 不同路径--简单的动态规划
-
荐 LeetCode 120. 三角形最小路径和 | Python
-
【每日一道算法题】Leetcode之longest-increasing-path-in-a-matrix矩阵中的最长递增路径问题 Java dfs+记忆化
-
Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
-
荐 LeetCode 112. 路径总和 | Python
-
动态规划_leetcode.64.最小路径和
-
63. 不同路径 II
-
LeetCode 63. 不同路径 II
-
63. 不同路径 II
-
[leetcode]63. 不同路径 II