iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0

題目說明:給定一個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]#回傳右下角總共的方法數

上一篇
Day 3 Remove Duplicates from Sorted List
下一篇
Day 5 Same Tree
系列文
從leetcode學習資料結構和演算法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言