題目說明:給定一個m*n的陣列,要你求出有多少唯一可以從左上走到右下的路徑方法。每次只能往下或往右走
解題思路:這其實跟國中或國小的數學題有點類似,就是求有幾種最短路徑方法數和。第一行或第一列第一列都只有一種走法(只能一路下向或向右),其他格子是由其上面格子的方法數加上其左方格子的方法數,舉一個2*3的格子為例,他的方法數如下:
1 1 1
1 2 3
我們可以知道走到右下角的格子總共有3種方法
附上程式碼和註解
Java
class Solution {
public int uniquePaths(int m, int n) {
int a[][]=new int[m][n];//建立m*n陣列
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0 || j==0) a[i][j]=1;//第一行或第一列都只有一種方法
else {
a[i][j]=a[i-1][j]+a[i][j-1];//第i列第j行的方法數是由上面格子(i-1列j行)的方法數加上其左方格子(i列j-1行)的方法數相加總
}
}
}
return a[m-1][n-1];//回傳右下角總共的方法數
}
}
Python
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
arr=[[0 for x in range(n)] for y in range(m)]#建立m*n陣列
for i in range(m):
arr[i][0]=1#第一行或第一列都只有一種方法
for j in range(n):
arr[0][j]=1#第一行或第一列都只有一種方法
for i in range(1,m):
for j in range(1,n):
arr[i][j]=arr[i-1][j]+arr[i][j-1]#第i列第j行的方法數是由上面格子(i-1列j行)的方法數加上其左方格子(i列j-1行)的方法數相加總
return arr[m-1][n-1]#回傳右下角總共的方法數