DP(2) | Java | LeetCode 62, 63, 343, 96 做题总结(96 未完)

news2024/9/20 6:35:12

62.不同路径

  • 我的代码(报错)
    写的过程中感到很迷惑的点:①二维数组和这道题目的对应弄不清除,m n的初始化 是 dp[m][n] 还是 dp[n][m] ②
class Solution {
    public int uniquePaths(int m, int n) {
        int[][]dp = new int[m+1][n+1];
        dp[0][0] = 0;
        dp[0][1] = 1;
        dp[1][0] = 1;
        for(int i=1; i<m; i++) {
            for(int j=1; j<n; j++) {
                dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
            }
        }
        return dp[m][n];
    }
}

/*
自己解题的时候思考过程

n-1 : 往右走的次数
m-1 : 往下走的次数 

dp[i][j]到当前的位置,有几种方法
dp[0][0] 0
dp[0][1] 1
dp[1][0] 1
dp[1][1] 2
dp[i][j] 的前一个状态是,(1)他的左边dp[i-1][j],或者(1)dp[i-1][j-1]
dp[i][j] = dp[i-1][j] + dp[i-1][j-1];

 */

初始化出错,这里初始化要覆盖到整个左列 和 横排

// 第0列,dp[i][0] 表示到当前的位置,有几种方法,这一列都是只有一种
 for (int i = 0; i < m; i++) {
  dp[i][0] = 1;
 }
 
// 第0行,dp[0][i] 表示到当前的位置,有几种方法,这一行都是只有一种
 for (int i = 0; i < n; i++) {
     dp[0][i] = 1;
 }

JAVA二维数组存储示意图:

在这里插入图片描述

  • 思考过程
    (1) 确定dp数组以及下标的含义:到当前的位置[i][j],有几种方法 dp[i][j]
    (2) 确定递推公式 dp[i][j] = dp[i-1][j] + dp[i][j-1];
    (3) dp数组如何初始化 本题就栽在这一步了,其实是要for循环 初始化一列和一排的
    (4) 确定遍历顺序 从前到后
    (5) 举例推导dp数组
    (6) 打印 dp 数组

  • ac

class Solution {
    public int uniquePaths(int m, int n) {
        int[][]dp = new int[m][n];

        for(int i=0; i<m; i++) {
            dp[i][0] = 1;
        }
        
        for(int i=0; i<n; i++) {
            dp[0][i] = 1;
        }

        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];
            }
        }

        return dp[m-1][n-1];
    }
}

java

求二维数组长度

int m = obstacleGrid.length;
int n = obstacleGrid[0].length;

63. 不同路径 II

  • 推导公式 dp[i][j] = dp[i-1][j] + dp[i][j-1];
    如果[i][j]有障碍,本来就走不了。
    if(obs[i][j] == 0) dp[i][j] = dp[i-1][j] + dp[i][j-1];

  • 初始化
    如果第一行或者第一列有一个障碍物,那么后面的都要初始化为0

  • 出错

java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 3
  at line 22, Solution.uniquePathsWithObstacles
  at line 56, __DriverSolution__.__helper__
  at line 86, __Driver__.main

因为dp从[1][1]走起

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;

        int[][]dp = new int[m][n];
        if(obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1) {
            return 0;
        } 
        //初始化
        for(int i=0; i<m && obstacleGrid[i][0]!=1; i++) {
            dp[i][0] = 1;
            //中途如果有obstacleGrid[i][0]!=0,那就暂停循环,Java初始化都赋了0
        }

        //初始化
        for(int j=0; j<n && obstacleGrid[0][j]!=1; j++) {
            dp[0][j] = 1;
        }
        for(int i=1; i<m; i++) { //这里写了0是错误的
            for(int j=1; j<n; j++) {
                dp[i][j] = (obstacleGrid[i][j]==0?(dp[i][j-1]+dp[i-1][j]):0);
            }
        }
        return dp[m-1][n-1];
    }
}

//我的思考
// obstacleGrid[i][j] = 1 此处有障碍物,走不了
// obstacleGrid[i][j] = 0
// dp[i][j] = dp[i-1][j] + dp[i][j-1]
// 如果 obstacleGrid[i-1][j] = 1,前一种状态就不能是dp[i-1][j],dp[i][j] = dp[i][j-1]
// 如果 obstacleGrid[i][j-1] = 1,前一种状态就不能是dp[i][j-1],dp[i][j] = dp[i-1][j]

343. 整数拆分

没啥思路

力扣解题思路
① 尽可能拆成相同的数字,当所有拆分出的数字相等时,乘积最大。② 最优拆分数字为 3 。

  • 数学方法
class Solution {
    public int integerBreak(int n) {
        if(n <= 3) return n - 1;
        int a = n / 3, b = n % 3;
        if(b == 0) return (int)Math.pow(3, a);
        if(b == 1) return (int)Math.pow(3, a - 1) * 4;
        return (int)Math.pow(3, a) * 2;
    }
}
  • 动态规划?
    有点没看懂

96. 不同的二叉搜索树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW电子水泵性能测试平台

开发了一种车用电子水泵性能测试平台&#xff0c;该平台以工控机为载体&#xff0c;利用LabVIEW开发上位机软件&#xff0c;采用PLC控制阀门和水泵等电气元件&#xff0c;通过RS485进行数据采集并传输到上位机。通过上位机与下位机的协同控制&#xff0c;实现了数据交互处理和性…

关于力反馈设备应用方向的探讨

力反馈是在虚拟现实 (VR)等模拟环境中通过机动运动或阻力模拟真实世界的物理触觉。大多数人都是通过视频游戏控制器&#xff08;如方向盘或踏板&#xff09;和其他设备&#xff08;如飞行模拟器操纵杆&#xff09;来了解力反馈效果。但我们都知道该技术的用途远不止于游戏。 触…

ENSP中OSPF配置

题目 划分网段&#xff0c;配置ip OSPF配置按照区域划分&#xff0c;这个网段也要按照区域个数划分&#xff0c;如这一题&#xff0c;分成两个区域&#xff0c;所以将192.168.1.0/24划分先为两个网段&#xff0c;然后在具体的划分区域中的网段。 以交换机为中心的三条线属于一…

探索AI人才培养新范式,合合信息与同济大学软件学院签署产教融合人才培养协议

随着科学技术的发展&#xff0c;促进人工智能产业与高校人才培养相融合&#xff0c;正成为业界关注的焦点。7月3日&#xff0c;上海合合信息科技股份有限公司&#xff08;以下简称&#xff1a;合合信息&#xff09;与同济大学软件学院“产教融合人才培养签约暨创新实践基地”揭…

模式物种葡萄基因组(T2T)--文献精读29

The complete reference genome for grapevine (Vitis vinifera L.) genetics and breeding 葡萄&#xff08;Vitis vinifera L.&#xff09;遗传学和育种的完整参考基因组 摘要 葡萄是全球最具经济重要性的作物之一。然而&#xff0c;以往版本的葡萄参考基因组通常由成千上万…

Qt/C++项目积累: 2.主机监控器 - 2.2 历史功能实现

修订历史&#xff1a; 20240711&#xff1a;初始表设计&#xff0c;采用sqlite 正文&#xff1a; 关于历史数据存储&#xff0c;考虑的是用数据库来完成&#xff0c;目前考虑使用Sqlite和mysql&#xff0c;先用sqlite来实现&#xff0c;设计表过程如下&#xff1a; 机器总览…

【栈和队列OJ题】

栈和队列OJ题 文章目录 栈和队列OJ题1. 用队列实现栈2. 用栈实现队列3. 括号匹配问题4. 循环队列 1. 用队列实现栈 OJ链接&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 好的&#xff0c;我们一起来看一下题目&#xff0c;题目是这样说的 思路&…

IDEA实现热部署

什么是热部署&#xff1f; 热部署&#xff08;Hot Deployment&#xff09;是指在应用程序运行过程中&#xff0c;无需停止整个应用程序或重新启动服务器&#xff0c;就能够部署新的代码、资源或配置文件&#xff0c;使其立即生效。这种部署方式有助于提高开发效率和系统的可用性…

这些免费看电视的直播软件,还能免费追剧的app,需要的收藏!

想看中央台和地方卫视的电视直播app有什么呢&#xff1f;支持手机和智能电视的电视直播软件有哪些&#xff1f;今天要跟大家聊聊那些让人眼前一亮的电视直播软件&#xff0c;特别是2024年还能免费看电视直播的神器&#xff0c;让家里的老人也能享受到精彩的电视节目&#xff0c…

无线领夹麦克风哪个牌子好,热门无线麦克风十大排名推荐

​在这个信息爆炸的时代&#xff0c;声音的传递变得愈发重要。无论是直播中的激情解说&#xff0c;还是视频创作中的精彩对白&#xff0c;亦或是远程会议中的清晰发言&#xff0c;一款出色的无线领夹麦克风都能成为你的得力助手。今天&#xff0c;就让我们一同探索多款备受瞩目…

【测开能力提升-fastapi框架】fastapi模版引擎简单使用

1.6 通过模版引擎返回HTM页面 import uvicorn from fastapi import FastAPI, Request from fastapi.templating import Jinja2Templatesapp FastAPI()# 初始化模版引擎存放位置 templates Jinja2Templates(directory"templates")app.get("/") async def…

在Office里面无缝使用任何一家AI大模型,免费的!

昨天一个朋友说他在Word里面&#xff0c;用了一个插件&#xff0c;可以在右侧和AI对话&#xff0c;然后把AI生成的内容载入到左边的文档中。 我当时心理的想法&#xff1a;我这是穿越了吗&#xff1f;这不是我去年2月就实现&#xff0c;然后又扔掉的功能吗&#xff1f; 是的&a…

国漫推荐09

剧场版 1.龙之谷 《龙之谷&#xff1a;破晓奇兵》2014年7月31日 《龙之谷2精灵王座》2016年8月19日 2.星游记 《星游记之风暴法米拉》2017年8月11日 《星游记之风暴法米拉2》2020年3月28日 《星游记之冲出地球》2022-08-14 3.《大鱼海棠》2016年7月8日 4.《哪吒之魔童降世》2…

大数据如何推动工业数字化发展?

随着工业领域的深刻变革&#xff0c;数字化成为了驱动行业前行的核心力量。在这一转变中&#xff0c;大数据扮演着不可或缺的角色。它不仅为企业提供了洞察市场趋势、消费者行为等关键信息的窗口&#xff0c;还为企业优化生产流程、提升产品质量以及推动创新提供了强有力的支持…

前端-Cookie篇

文章目录 一、由来什么是Cookie&#xff1f;特点Cookie的类型 二、原理三、Cookie生成机制客户端设置案例 四、属性五、缺陷最后分享一段自己工作中封装的一些关于cookie的公众方法✒️总结 前端Cookie是Web开发中非常重要的一部分&#xff0c;它是服务器发送到用户浏览器并保存…

分享一款嵌入式开源LED指示灯控制代码框架cotLed

一、工程简介 cotLed是一款轻量级的LED控制软件框架&#xff0c;可以十分方便地控制及自定义LED的各种状态&#xff0c;移植方便&#xff0c;无需修改&#xff0c;只需要在初始化时实现单片机硬件GPIO初始化&#xff0c;同时为框架接口提供GPIO写函数即可。 框架代码工程地址&a…

C++:重定义

派生类和基类的同名成员问题 派生类中再实现一个基类中的方法会怎样 (1)代码实验&#xff1a;派生类和基类中各自实现一个内容不同但函数原型完全相同的方法&#xff0c;会怎么样 (2)结论&#xff1a;基类对象调用的是基类的方法&#xff0c;派生类对象调用执行的是派生类中重…

Vue3 + Echarts堆叠折线图的tooltip不显示问题

问题介绍 使用Echarts在Vue3Vite项目中绘制堆叠折线图的的时候&#xff0c;tooltip总是不显示&#xff0c;经过很长时间的排查和修改&#xff0c;最后发现是在使用上有错误导致的。 错误图片展示 问题原因 由于Vue3底层使用proxy代理创建示例&#xff0c;使用其创建出来的实…

甘蔗基因组--文献精读30

A chromosomal-scale genome assembly of modern cultivated hybrid sugarcane provides insights into origination and evolution 现代栽培杂交甘蔗的染色体级基因组组装提供了起源和进化的洞见&#xff0c;确实甘蔗好几个基因组了~ 摘要 甘蔗是一种具有重要经济和工业价值…

提升论文质量和说服力的高阶技巧:数据驱动

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 今天分享的内容是“如何利用数据驱动的高阶技巧提升学术论文的深度与说服力”。从高级统计分析到机器学习&#xff0c;再到数据可视化和模型验证&#xff0c;我们将提供了一整套策略&am…