1、问题描述


2、两种解法
1、递归法(代码简洁,效率不高)
可以画出一棵树,叶子节点个数对应路径个数。
void path(int m, int n,int *p){
if(m==0 && n==0)
(*p)++;
if(m>0)
path(m-1,n,p);
if(n>0)
path(m,n-1,p);
}
int uniquePaths(int m, int n){
int a = 0;
path(m-1,n-1,&a);
return a;
}
2、动态规划
假设 dp[i][j] 表示到达(i,j)的路径的个数。那么就有
dp[j][i] = dp[j-1][i] + dp[j][i-1];
int uniquePaths(int m, int n){
int dp[n][m];
int i, j;
for(i=0; i<m; i++)
dp[0][i] = 1;
for(j=1; j<n; j++)
dp[j][0] = 1;
for(i=1; i<m; i++)
for(j=1; j<n; j++)
dp[j][i] = dp[j-1][i]+dp[j][i-1];
return dp[n-1][m-1];
}
来源:CSDN
作者:ken的学习之路
链接:https://blog.csdn.net/weixin_38072112/article/details/104277459