【Java】動態規劃不同路徑 I

先看第一題

題目描述

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

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

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

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

示例1

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

示例2 

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

解題思路

很明顯,需要找到狀態轉移方程,然後找到初始化的狀態,首先定義狀態dp[i][j]=到(i,j)點的路徑數

dp[i][j] = dp[i][j-1]+dp[i-1][j]

初始化第一行和第一列都爲1,因爲到第一行和第一列的任意一個點的路徑數都是1,要麼橫着走,要麼豎着走

class Solution {
    public int uniquePaths(int m, int n) {
        // dp[i][j] = 到i,j點的最多的路徑
        int[][] dp = new int[m][n];
        // 所有邊上的初始化爲1,因爲邊上只能一種走法
        for (int i = 0; i < n; i++) dp[0][i] = 1;
        for (int i = 0; i < m; i++) dp[i][0] = 1;
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章