leetcode 62
题目
解题思路
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> f(m, vector<int>(n));
for(int i=0; i<m; i++){
f[i][0] =1;
}
for(int j=0; j<n; j++){
f[0][j] =1;
}
for(int i=1; i<m; i++){
for(int j=1; j<n; j++){
f[i][j] = f[i-1][j] + f[i][j-1];
}
}
return f[m-1][n-1];
}
};
例如:
m=3, n=4
(0,0), (0,1), (0,2), (0,3)
(1,0), (1,1), (1,2), (1,3)
(2,0), (2,1), (2,2), (2,3)
由于机器人智能向右和向下行动,所以从(0,0) 到(0,1) 只能是向右1格,从(0,0)到(2,0) 只能是向下2格。
从(0,1) 到(1,1) 也只能是向下1格,从(1,0) 到(1,1) 只能是向右1格。
由此的到,动态转移方程,
f(i,j) = f(i-1,j) + f(i,j-1)
限定条件是f(i,0) 和 f(0,j) 都是1.
优化
使用滚动数组,替代二维数组,优化空间复杂度。
由于计算f(i) 行的时候,值使用f(i)行和f(i-1)行的数据,所以可以使用滚动数组。