LeetCode#62 不同路徑 Java

@author: sdubrz
@date: 2020.04.18
題號: 62
題目難度: 中等
考察內容: 動態規劃
原題鏈接 https://leetcode-cn.com/problems/unique-paths/
題目的著作權歸領釦網絡所有,商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題代碼轉載請聯繫 lwyz521604#163.com

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。

問總共有多少條不同的路徑?

不同路徑

例如,上圖是一個7 x 3 的網格。有多少可能的路徑?

示例 1:

輸入: m = 3, n = 2
輸出: 3
解釋:
從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右

示例 2:

輸入: m = 7, n = 3
輸出: 28

提示:

  • 1 <= m, n <= 100
  • 題目數據保證答案小於等於 2 * 10 ^ 9

解法

對於網格中的位置,最左邊的一列和最上邊的一行都只有一種走法。而對於其他任意位置的網格,有兩類走法可以到達:

  1. 從它左邊的鄰居網格到達
  2. 從它上邊的鄰居網格到達

所以對於這種情況,到這個網格的走法數量等於到它左邊網格的走法數量加上到它上邊網格的走法數量。

這樣,這個問題就可以解決了。

class Solution {
    public int uniquePaths(int m, int n) {
        if(m==1||n==1){
            return 1;
        }

        int[][] counts = new int[m][n];
        for(int i = 0; i<n; i++)
            counts[0][i] = 1;
        
        for(int i=1; i<m; i++){
            counts[i][0] = 1;
            for(int j=1; j<n; j++){
                counts[i][j] = counts[i][j-1]+counts[i-1][j];
            }
        }
        return counts[m-1][n-1];
        
    }
}

下面是在 LeetCode 系統中的提交結果:

執行結果: 通過 顯示詳情
執行用時 : 0 ms, 在所有 Java 提交中擊敗了 100.00% 的用戶
內存消耗 : 36.1 MB, 在所有 Java 提交中擊敗了 6.35% 的用戶
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章