剑指offer 专项突破版 98、路径的数目

题目链接

思路
  • 这种路径类题一般是用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++){
				//计算之前存的是 f(i-1,j) 
                //计算之后存的是 f(i,j)
                dp[j] += dp[j-1];
            }
        }

        return dp[n-1];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值