从原点出发,只能向右或向下移动,用vt[n][m]记录可达路径的数目。
对于点阵中的任一点(i, j), 它可达路径的数目vt[i][j] = vt[i-1][j] + vt[i][j-1]. 即它上方那点可达路径数目加上其左边那点可达路径数目。
复杂度O(nm).
代码:
class Solution
{
public:
int uniquePaths(int m, int n)
{
vector<vector<int>> vt;
for (int i = 0; i < m; ++ i)
{
vector<int> line(n, 0);
vt.push_back(line);
}
for (int i = 0; i < n; ++ i)
{
vt[0][i] = 1;
}
for (int i = 1; i < m; ++ i)
{
vt[i][0] = 1;
}
for (int i = 1; i < m; ++ i)
{
for (int j = 1; j < n; ++ j)
{
vt[i][j] = vt[i-1][j] + vt[i][j-1];
}
}
return vt[m-1][n-1];
}
};