1. 程式人生 > 實用技巧 >部落格園markdons編輯器外掛--實時預覽、自動翻頁、數學公式

部落格園markdons編輯器外掛--實時預覽、自動翻頁、數學公式

leetcode acwing

動態規劃 \(O(n)\)

設定f[i,j]為從起點到店[i,j]的路徑數量,由於機器人只會向下或者向右,所以狀態轉移關係式很容易求得

\[f[i,j] = f[i-1,j] + f[i,j-1] \]

時間複雜度

\(O(n^2)\)

空間複雜度

\(O(n^2)\)

C++ 程式碼

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

        int f[m + 1][n + 1];
        memset(f, 0, sizeof f);

        f[1][1] = 1;
        for (int i = 1; i <= m; i ++)
        {
            for (int j = 1; j <= n; j ++)
            {
                if (i == 1 && j == 1) continue;
                f[i][j] = f[i-1][j] + f[i][j-1];
            }
        }

        return f[m][n];
    }
};

做一下狀態壓縮

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

        int f[n + 1];
        memset(f, 0, sizeof f);

        f[1] = 1;
        for (int i = 1; i <= m; i ++)
        {
            for (int j = 2; j <= n; j ++)
            {
                f[j] = f[j] + f[j-1];
            }
        }

        return f[n];
    }
};

組合數

機器人到終點一定會走\(m+n-2\)步,其中向右走多少步的可能有\(m-1\)種。所以我們得到

\[C_{m+n-2}^{m-1} \]

程式碼略