题目:机器人位于一个 m x n 网格的左上角, 在下图中标记为“Start” (开始)。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,在下图中标记为“Finish”(结束)。
问有多少条不同的路径?
例如,上图是一个3 x 7网格。有多少可能的路径?
注意: m 和 n 的值均不超过 100。
解:从起点到m,n的路径=从起点到m,n-1的路径+从起点到m-1,n的路径;当m和n其中一个等于1时,只能走一个方向,只有一种走法。
class Solution {
public:
int uniquePaths(int m,int n)
{
if(m<1||n<1)
return 0;
if(m<2||n<2)
return 1;
//创建一个二维数组用来保存到点(i,j)路径数
int dp[m][n];
memset(dp,0,sizeof(dp));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0||j==0)
dp[i][j]=1;
else
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
#在m*n网格中从左上角到右下角的路径数
class Solution:
def uniquePaths(self,m,n):
"""
:type m:int
:type n:int
:rtype:int
"""
if(m<=0 or n<=0):
return 0
if( m==1 or n==1):
return 1
matrix=[[1 for j in range(n)] for i in range(m)]
for i in range(1,m):
for j in range(1,n):
matrix[i][j]=matrix[i-1][j]+matrix[i][j-1]
return matrix[-1][-1]