今天继续刷leetcode,第62题,求不同路径。
分析:
从起点到终点的路径,这题是动态规划,通过一系列子问题求解最终的问题。可以先从起点开始,到达周围的点的路径,然后求解到达其他点的路径。
1 | 1 | 1 | 1 |
1 | 2 | 3 | 4 |
1 | 3 | 6 | 10 |
可以看出每个点的路径和,等于左边的路径和加上上面的路径和,那么就可以解决问题了。
附上c++代码:
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> bp(n,vector<int>(m,0));
for(int i=0;i<m;i++)
bp[0][i]=1;
for(int i=0;i<n;i++)
bp[i][0]=1;
for(int p=1;p<n;p++)
{
for(int q=1;q<m;q++)
bp[p][q]=bp[p-1][q]+bp[p][q-1];
}
return bp[n-1][m-1];
}
};
附上python代码:
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
bp=[[0 for _ in range(m)] for _ in range(n)]
for i in range(n):
bp[i][0]=1
for i in range(m):
bp[0][i]=1
for i in range(1,n):
for j in range(1,m):
bp[i][j]=bp[i-1][j]+bp[i][j-1]
return bp[n-1][m-1]