思路:
全都是动态规划, 第一个方法就是开辟一块m * n的数组, 并都初始化为1, 遍历除第一行第一列以外的所有元素, 每个格子等于自己加上他上方的加上他左方的和.
第二个是优化一下只需要O(min(m, n))的空间.
int uniquePaths(int m, int n) {
int count[m][n];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
count[i][j] = 1;
for (int i = 1; i < m; i++)
for (int j = 1; j < n; j++)
count[i][j] = count[i - 1][j] + count[i][j - 1];
return count[m - 1][n - 1];
}
int uniquePaths(int m, int n) {
if (m > n) return uniquePaths(n, m);
int count[m];
for (int i = 0; i < m; i++)
count[i] = 1;
for (int j = 1; j < n; j++)
for (int i = 1; i < m; i++)
count[i] += count[i - 1];
return count[m - 1];
}