[LeetCode]problem 62. Unique Paths

TAG

動態規劃

組合

link

方法

就使用動態規劃而言,這道題與爬梯子很像,就是到達當前位置的不同路徑數等於到達上邊、左邊位置的路徑和。

這道題可以直接從數學角度求解——mxn的格子,從左上到右下,只能向右或下,那麼其路徑必然是m-1個“右”,n-1個“下”構成的序列。所以不同的路徑,就是求所有m-1個“右”和n-1個“下”組合的方法數,即 C(m-1 + n -1 , m-1)

然而上面這個算式如果暴力求解,基本上隨隨便便就溢出了。我們人在算的時候,都是在約分的。所以如果直接算這個,可以通過不斷約分的形式。

變態組合數C(n,m)求解看到了不同的解決辦法,不過沒有細看。

我想我還是用動態規劃算吧…

當然從這個角度去理解組合的意義,想想也是不錯的——C(m-1 +n-1,m-1) = C(m-1 + n-2,m-1) + C(m-2+n-1,m-2) => C(n,r) = C(n-1,r) + C(n-1,r-1);

代碼

class Solution {
public:
    int uniquePaths(int m, int n) {
        if(0 == m || n == 0) return 0 ;
        vector<vector<int>> M(m , vector<int>(n,1)) ;
        for(size_t i  = 1 ; i < m ; ++i)
        {
            for(size_t j = 1 ; j < n ; ++j)
            {
                M[i][j] = M[i-1][j] + M[i][j-1] ;
            }
        }
        return M[m-1][n-1];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章