62. 不同路徑

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

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

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

思考:是一道動態規劃的題目,可以看出圖中黑線部分上面,若是走最上面一行/最左邊一列的位置,只可能是沿着最上面一直向右走/沿着最左邊一直向下走,所以走法只有一種;然而黑線的右下方,走的方法就等於它正上方和左側的走法之和。

動態規劃的出發點:枚舉不是很理想,枚舉沒有利用題目的一些性質。

此題中,若直接一一枚舉每一條路徑,就沒有利用題目中說的“機器人每次只能向下或者向右移動一步”

思考清楚三個問題:

1、確定動態規劃數組dp[]中dp[i]代表什麼狀態?

代表走到當前位置的路徑數目

2、確定每兩個相鄰狀態之間有什麼聯繫?dp[i] 和 dp[i-1]?

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

3、dp數組當中的dp[0]要會使用,可以減少邊界條件的判定。

class Solution {
public:
    int uniquePaths(int m, int n) {
        if(m==0||n==0)
            return 0;
        vector<vector<int>> dp(m,vector<int>(n,0));
        dp[0][0] = 1;
        for(int i = 1;i < m;i++){
            dp[i][0] = 1;
        }
        for(int j = 1;j < n;j++){
            dp[0][j] = 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];
    }
};


 

 

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