class Solution { public: /** * * @param m int整型 * @param n int整型 * @return int整型 */ int uniquePaths(int m, int n) { if (m < n) { swap(m, n); } long long res = 1; for (int i = m; i <= m + n - 2; ++i) { res = res * i / (i - m + 1); } return res; } };
思路:组合数学。
一共需要向下走n - 1次,向右走m - 1次,共m + n - 2次。
即从m + n - 2次步数中选择n - 1次向下走,为C(n - 1) (m + n - 2)。