leetcode.62不同路径(C语言)

一世执手 提交于 2020-02-12 14:20:37

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];
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!