LeetCode 62. 不同路径
动态规划 \(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}
\]
代码略

浙公网安备 33010602011771号