本文共 774 字,大约阅读时间需要 2 分钟。
题目:求解从左上角到右下角的路径条数。
思路:
动态规划(dp[x][y]=dp[x-1][y]+dp[x][y-1])dp[x][y]表示到达位置(x,y)时的路径条数,dp[x][y]=dp[x-1][y](到达位置(x-1,y)时的路径条数)+dp[x][y-1](到达位置(x,y-1)时的路径条数),其中 dp[1][1]=1。
class Solution {public: int uniquePaths(int m, int n) { int dp[101][101]; memset(dp,0,sizeof(dp)); for(int x=1;x<=m;x++){ for(int y=1;y<=n;y++){ dp[x][y]=dp[x-1][y]+dp[x][y-1]; dp[1][1]=1; } } return dp[m][n]; }};
思路二:组合数
C(m,n)=C(m-1,n)+C(m-1,n-1)
矩阵大小为m*n,所以一共需要走m+n-2步到达目标位置其中一共需要向下走m-1步,因次总的步数为C(m+n-2,m-1)。根据上面的公式即可求出。C[x][0]=1.
class Solution {public: int uniquePaths(int m, int n) { int C[202][101]; memset(C,0,sizeof(C)); for(int x=0;x<202;x++) C[x][0]=1; for(int x=1;x
转载地址:http://ynrai.baihongyu.com/