LeetCode.62——不一樣路徑


  • 問題描述:

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

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

    問總共有多少條不一樣的路徑?code

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

  • 問題分析:

    這是一個比較簡單的動態規劃問題,因爲沒有障礙 (不一樣路徑2 網格中有障礙),leetcode

    因爲每一步都只能向右或者向下,那很明顯,能夠知道第一行和第一列的每個格子都是1:get

    因爲只能向右和向下,能達到2號位置的路徑只有兩種,右→下 或者 下→右。同理,第一行第一列之外的其餘任何一個位置的路徑數,都等於當前位置前面和上面的路徑和。這樣就能夠獲得最終的路徑:io

    dp[m-1][n-1] = dp[m-1][n-2] + dp[m-2][n-1]
  • 代碼實現:

    public class UniquePaths_62{
        public static void main(String[] args) {
            Solution4 solution = new Solution4();
           int res = solution.uniquePaths(1,1);
            System.out.println(res);
        }
    
    }
    
    class Solution {
        public int uniquePaths(int m, int n) {
            //1.初始化第一行第一列
            int[][] dp = new int[m][n];
            for (int i = 0; i < dp.length; i++) {
                for (int j = 0; j < dp[0].length; j++) {
                    dp[0][j] = 1;
                    dp[i][0] = 1;
                }
            }
    
            for (int i = 1; i < dp.length; i++) {
                for (int j = 1; j < dp[0].length; j++) {
                    dp[i][j] = dp[i][j-1] + dp[i-1][j];
                }
            }
            return dp[m-1][n-1];
        }
    }

    性能:class

    ​ (1)時間複雜度:O(m*n)方法

    ​ (2)空間複雜度:O(m*n)im


  • 最後 :

    因爲我的水平有限,博文中不免有錯誤或表達不許確之處,歡迎各位大佬批評指正。若有更好的方法,歡迎評論區留下你的高見,歡迎轉載轉發,記得註明出處。碼字不易,若有幫助,歡迎打賞一杯熬夜咖啡,謝謝老闆~~~

相關文章
相關標籤/搜索