[算法分析与设计] 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);
}
};
题目大意:给定大小的网格,从左上顶点到右下顶点一共有多少不同的路径。(只允许向下和向右走)
思路:因为(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);
}
};
相关文章推荐
- [算法分析与设计] leetcode 每周一题: Kth Smallest Element in a BST
- [算法分析与设计] leetcode 每周一题: 328. Odd Even Linked List
- [算法分析与设计] leetcode 每周一题: Contains Duplicate III
- [算法分析与设计] leetcode 每周一题: 053. Maximum Subarray
- [算法分析与设计] leetcode 每周一题: Word Ladder
- [算法分析与设计] leetcode 每周一题: 420. Strong Password Checker
- [算法分析与设计] leetcode 每周一题: Set Matrix Zeroes
- [算法分析与设计] leetcode 每周一题: 162. Find Peak Element
- [算法分析与设计] leetcode 每周一题: Surrounded Regions
- [算法分析与设计] leetcode 每周一题: 201. Bitwise AND of Numbers Range
- [算法分析与设计] leetcode 每周一题:Longest Substring Without Repeating Characters
- [算法分析与设计] leetcode 每周一题: Copy List with Random Pointer
- [算法分析与设计] leetcode 每周一题: 215. Kth Largest Element in an Array
- [算法分析与设计] leetcode 每周一题: 007. Reverse Integer
- [算法分析与设计] leetcode 每周一题: 312. Burst Balloons
- [算法分析与设计] leetcode 每周一题: 135. Candy
- [算法分析与设计] leetcode 每周一题: 030. Substring with Concatenation of All Words
- [算法分析与设计] leetcode 每周一题: 126. Word Ladder II
- [算法分析与设计] leetcode 每周一题: 310. Minimum Height Trees
- [算法分析与设计] leetcode 每周一题: 494. Target Sum