【算法-动态规划】不同路径

news/2024/6/16 17:24:50 标签: 算法, 动态规划

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:

image-20231011194900107

输入:m = 3, n = 7
输出:28

示例 2:

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下

示例 3:

输入:m = 7, n = 3
输出:28

示例 4:

输入:m = 3, n = 3
输出:6

提示:

  • 1 <= m, n <= 100
  • 题目数据保证答案小于等于 2 * 10的9次方

题解:

public static void main(String[] args) {
    int count = new DP_03_UniquePaths62_03().uniquePaths(3, 7);
    System.out.println(count);
}

/**
 * 二维数据解决
 *
 * @param m
 * @param n
 * @return
 */
public int uniquePaths(int m, int n) {
    int[][] dp = new int[m][n];
    print(dp);
    //填充首行首列
    for (int i = 0; i < m; i++) {
        dp[i][0] = 1;
    }
    for (int i = 0; i < n; i++) {
        dp[0][i] = 1;
    }
    print(dp);
    for (int i = 1; i < m; i++) {
        for (int j = 1; j < n; j++) {
            dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
        }
    }
    print(dp);
    return dp[m - 1][n - 1];
}

static void print(int[][] dp) {
    System.out.println(StringUtil.repeat("-", 20));
    Object[] array = IntStream.range(0, dp[0].length + 1).boxed().toArray();
    System.out.printf(StringUtil.repeat("%2d ", dp[0].length) + "%n", array);
    for (int[] d : dp) {
        array = Arrays.stream(d).boxed().toArray();
        System.out.printf(StringUtil.repeat("%2d ", d.length) + "%n", array);
    }
}

题解降维优化:

public static void main(String[] args) {
    int count = new DP_03_UniquePaths62_04().uniquePaths(3, 7);
    System.out.println(count);
}

/**
 * 一维数据解决
 * [0, 0, 0, 0, 0, 0, 0]
 * [1, 1, 1, 1, 1, 1, 1]
 * [1, 1, 1, 1, 1, 1, 1]
 * [1, 2, 3, 4, 5, 6, 7]
 * [1, 3, 6, 10, 15, 21, 28]
 *
 * @param m
 * @param n
 * @return
 */
public int uniquePaths(int m, int n) {
    int[] dp = new int[n];
    System.out.println(Arrays.toString(dp));
    //填充首行首列
    for (int i = 0; i < n; i++) {
        dp[i] = 1;
    }
    System.out.println(Arrays.toString(dp));
    for (int i = 1; i < m; i++) {
        //相当于每次遍历行的时候,首列为1
        dp[0] = 1;
        System.out.println(Arrays.toString(dp));
        for (int j = 1; j < n; j++) {
            //这里的dp[j]相当于上一行当前列的数据,dp[j - 1]是当前行前一列的数据
            dp[j] = dp[j - 1] + dp[j];
        }
    }
    System.out.println(Arrays.toString(dp));
    return dp[n - 1];
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img


http://www.niftyadmin.cn/n/5081451.html

相关文章

【eNSP】VLAN基础配置

一、基于接口划分VLAN&#xff08;Access接口和Trunk接口&#xff09; 1、创建VLAN LSW1 [LSW1]vlan batch 10 20 Info: This operation may take a few seconds. Please wait for a moment...done.LSW2 [LSW2]vlan batch 10 20 Info: This operation may take a few second…

CSP模拟52联测14 C.天竺葵

CSP模拟52联测14 C.天竺葵 文章目录 CSP模拟52联测14 C.天竺葵题目大意思路code 题目大意 给定两个长度为 n n n 的序列 a , b a , b a,b 需要在 a a a 序列中好到最长的序列 c c c 满足 c i 1 > b i c i c _{i 1} > b_i \times c_i ci1​>bi​ci​ 输出长…

python抓取制定产品图片及简介代码实现

python抓取制定产品图片及简介代码实现 # coding:utf-8 设置编码格式 import requests #引入requests from bs4 import BeautifulSoup import re #引入正则 import lxml import os #图片下载函数 def download_image(url, image_name=None): response = requests.g…

黑马JVM总结(三十一)

&#xff08;1&#xff09;类加载器-概述 启动类加载器-扩展类类加载器-应用程序类加载器 双亲委派模式&#xff1a; 类加载器&#xff0c;加载类的顺序是先依次请问父级有没有加载&#xff0c;没有加载自己才加载&#xff0c;扩展类加载器在getParent的时候为null 以为Boots…

vmware虚拟机启动、使用ubuntu问题

安装Ubuntu时&#xff0c;无法连接虚拟设备sata0:1&#xff0c;因为主机上没有相应的设备 安装Ubuntu时&#xff0c;无法连接虚拟设备sata0:1&#xff0c;因为主机上没有相应的设备_无法连接虚拟设备 sata0:1,因为主机上没有相应的设备-CSDN博客 无法连接虚拟设备 sata0:1,因…

基于Springboot实现垃圾分类网站管理系统项目【项目源码+论文说明】计算机毕业设计

基于Springboot实现垃圾分类网站管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述垃…

java 每种设计模式的作用,与应用场景

文章目录 前言java 每种设计模式的作用&#xff0c;与应用场景 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0…

【Python语义分割】语义分割的原理及常见模型的介绍

1 概述 语义分割是计算机视觉中的重要任务之一&#xff0c;其目的是将图像中的每个像素分配给特定的类别&#xff0c;从而实现对图像的精细分割。与目标检测不同&#xff0c;语义分割并不需要对物体进行位置和边界框的检测&#xff0c;而是更加注重对图像中每个像素的分类。随着…