不同路径--动态规划

这篇博客探讨了如何使用动态规划算法来计算网格中到达右下角的唯一路径数。通过定义状态转移方程f[i][j]=f[i][j-1]+f[i-1][j],并设置边界条件,可以有效地解决这个问题。博客详细解释了每个步骤,包括计算顺序和避免重复路径的重要性。
摘要由CSDN通过智能技术生成

不同路径
在这里插入图片描述

class Solution {
    public int uniquePaths(int m, int n) {
        /*
        如何做? 动态规划  重叠子问题  计算型动态规划
        确定状态:
        到 右下角(m,n)的格子的路径 = 到(m-1,n)的路径 + 到(m,n-1) 的路径和
        思考为什莫? 1.判断有无重复 ? 2 .判断有无遗漏?
        我们每次智能向右 向下走 所以到达某个格子一定是没有重复的

        子问题 
        到(m,n) 转化为到 (m-1 ,n )+ (m,n-1)智能从上面或者左边到达  (加法原理)

        边界条件: 多少条路径到达第一行和第一列?
        最左上角第一个格子只能原地一种方法
        到达第一行的所有格子智能有一条路
        到达一一列的所有格子只能向下走这一条路

        计算顺序:
        我们每一次计算都需要用到该格子的上面和左面的格子的路径数量
        所以我们从上向下从左到右进行计算

        地推方程:
        f[i][j]设置为到达i,j 格子的 路径的总数量
        f[i][j] = f[i][j-1]  + f[i-1][j]
        */

        int f[][] = new int[m][n];
        for(int i = 0 ;i < m ; i++){
            for(int j = 0 ; j < n ;j++){
                if(i==0 || j==0){
                    f[i][j] =1;
                }else{
                    f[i][j] = f[i][j-1]+f[i-1][j];
                }
            }
        }
        return f[m-1][n-1];

    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值