题目链接
思路
- 这种路径类题一般是用f(i,j)代表走到了坐标为(i,j)的位置
- 这个题可以设f(i,j)代表从原点走到坐标为(i,j)位置的路径的条数
- 因此f(i,j) = f(i-1,j) + f(i,j-1)
- 对于边界值 f(0,j) f(i,0)都只能一条路走到黑 所以都是1
- 这道题注意的点在于 我们可以状态压缩到用一维数组解决~ 此前都是用两行 但是其实可以更节约 用一行即可
- 我们假设这一行在更新前存储的是f(i-1,j)的值,且我们要从左到右填充~
- 在计算f(i,j)时,需要用到的是f(i-1,j)和f(i,j-1) 也就是说在更新的过程中需要把这个格子的值加上他前一个格子的值,因为这个格子还没更新,存的是f(i-1,j) 上一个格子更新了,存的是f(i,j-1)
class Solution {
public int uniquePaths(int m, int n) {
int[] dp = new int[n];
Arrays.fill(dp,1);
for(int i = 1 ; i < m ; i++){
for(int j = 1 ; j < n ; j++){
dp[j] += dp[j-1];
}
}
return dp[n-1];
}
}