您的位置:首页 > 产品设计 > UI/UE

[算法分析与设计] leetcode 每周一题: 62. Unique Paths

2017-09-13 21:17 561 查看
题目链接:https://leetcode.com/problems/unique-paths/description/

题目大意:给定大小的网格,从左上顶点到右下顶点一共有多少不同的路径。(只允许向下和向右走)

思路:因为(a,b)到(m,n)的路径数 = (a+1,b)到(m,n)路径数+(a,b+1)到(m,n)的路径数(a+1 < m, b+1 < n),所以一开始本人打算暴力递归遍历所有的可能路径,代码如下:

class Solution {
public:
int uniquePaths(int m, int n) {
return getPath(1,1,m,n)
}
int getPath(int x, int y, int m, int n) {
if(x == m && y == n) return 1;
if(x > m || y > n) return 0;
return getPath(x+1, y, m, n) + getPath(x, y+1,m,n);
}
};结果超时,因此我查看了其他人的博客,发现了可以用动态规划来解决,同时动态规划因为缓存了子问题的解,因此不超时。在动态规划的解决方案中,

思路稍微和我递归的反了过来,(0,0)到(a,b)的路径数 = (0, 0)到 (a-1,b)路径数 +  (0,0) 到(a,b-1)路径数

代码如下:
class Solution {
public:
int uniquePaths(int m, int n) {
return getPath(1,1,m,n)
}
int getPath(int x, int y, int m, int n) {
if(x == m && y == n) return 1;
if(x > m || y > n) return 0;
return getPath(x+1, y, m, n) + getPath(x, y+1,m,n);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: