leetcode62——不同路径——java实现

题目要求:
在这里插入图片描述
分析:
这是一道很经典的DP算法题,去年帮我同学笔试的时候就遇到过。
其实第一反应是动态规划,但是复杂度太高了。
关于递归与动态规划的分析,可以参照这位大神的博客:递归做法与动态规划做法的分析和比较

回到这道题目。
我们想要求其能够到达终点的所有路径,而且它的走法只能是往右或者往下,那么我们就把问题给拆分开来看。
在这里插入图片描述
对于上图中红笔写的“当前位置”来说,与其有关的就只有它的上面和左边。假设当前位置的坐标为dp[i][j],那么到达它路径的条数就是dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。
好了,到这里,这个问题其实已经解决了,但是,还有两个特殊的边界情况得考虑:
当只有一行时,它只能往右走;
当只有一列时,它只能往下走。
这两种情况下,走法都只有一种。

具体代码如下:

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];
        
        for(int i = 0; i < m; i ++) {
            for(int j = 0; j < n; j ++) {
                if(i == 0 || j == 0) {
                    dp[i][j] = 1;
                } else {
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        return dp[m - 1][n - 1];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值