当前位置: 首页 > news >正文

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

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 3at line 22, Solution.uniquePathsWithObstaclesat 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. 不同的二叉搜索树

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 7月11日学习打卡,数据结构栈
  • vue3项目打包的时候,怎么区别测试环境,和本地环境
  • 代码随想录算法训练营第9天
  • 142. 两个字符串的最小 ASCII 删除总和(卡码网周赛第二十五期(23年B站笔试真题))
  • java使用easypoi模版导出word详细步骤
  • 我被手机所伤,竟如此憔悴。
  • 假期笔记1:anaconda的安装与pycharm中的引用
  • Linux 程序卡死的特殊处理
  • 进度条提示-在python程序中使用避免我误以为挂掉了
  • 微服务的分布式事务解决方案
  • Linux 初识
  • 通过Arcgis从逐月平均气温数据中提取并计算年平均气温
  • springboot 操作mongo
  • 云计算渲染时代:选择Blender或KeyShot进行高效渲染
  • 第一关:Linux基础知识
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【面试系列】之二:关于js原型
  • Brief introduction of how to 'Call, Apply and Bind'
  • extjs4学习之配置
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JSDuck 与 AngularJS 融合技巧
  • LeetCode29.两数相除 JavaScript
  • Linux中的硬链接与软链接
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Phpstorm怎样批量删除空行?
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React Transition Group -- Transition 组件
  • 分享一份非常强势的Android面试题
  • 高性能JavaScript阅读简记(三)
  • 工程优化暨babel升级小记
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何利用MongoDB打造TOP榜小程序
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通信类
  • ​MySQL主从复制一致性检测
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #include
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • ()、[]、{}、(())、[[]]命令替换
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2)STM32单片机上位机
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (3) cmake编译多个cpp文件
  • (LeetCode) T14. Longest Common Prefix
  • (poj1.3.2)1791(构造法模拟)
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (实战篇)如何缓存数据
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (自用)交互协议设计——protobuf序列化
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例