首页 > 编程语言 >代码随想录算法训练营第三十三天| 62.不同路径 、63. 不同路径 II、343. 整数拆分 。c++转java

代码随想录算法训练营第三十三天| 62.不同路径 、63. 不同路径 II、343. 整数拆分 。c++转java

时间:2024-11-18 15:13:58浏览次数:3  
标签:初始化 obstacleGrid java int 路径 随想录 拆分 dp

62.不同路径

思路:按照dp五步法分析,成功AC。代码随想录

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m + 1][n + 1];
        dp[0][1] = 1;
        for(int i = 1 ;i <= m ;i++){
            for(int j = 1;j <= n ;j++){
                dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
            }
        }
        return dp[m][n];
    }
}

63. 不同路径 II

思路:这道题跟前面的题很相似,就是有一个小坑的地方,就是如果只有一行的情况,本来想用第一题代码随想录中提到的初始化第一行和第一列都为1,显然在这里就是不适用的,就还是沿用了我自己写的第一题初始化的方法,只管第一个节点。(或者当对第一行或者第一列初始化的时候,遇到障碍就停止)

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        //排除掉起点就有障碍的情况
        if(obstacleGrid[0][0] == 1)
            return 0;
        int m = obstacleGrid.length,n = obstacleGrid[0].length;
        int[][] dg = new int[m + 1][n + 1];
        dg[0][1] = 1;
        for(int i = 1;i <= m;i++){
            for(int j = 1;j <= n;j++){
                if(obstacleGrid[i - 1][j - 1] == 1)
                    continue;
                dg[i][j] = dg[i - 1][j] + dg[i][j - 1];
            }
        }
        return dg[m][n];
    }
}

343. 整数拆分

思路:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili

先看视频。使用五步法

1.题目求的是n的最大化乘积,所以有dp[i]就是i的最大乘积。

2.递推公式:dp[i] = max(dp[i],j * dp[i - j],j * (i - j)).

3.遍历顺序:3~n.

4.初始化:dp[2] = 1.

5.举例

至于这里为什么递推公式是这样的,俺的理解就是,题目是要将n进行拆分,所以是先从拆两个数开始,然后往下拆分,所以先比较的是j * (i - j),如果需要接着往下拆分的话,需要先确定j,然后i求(i-j)能够被拆分的最大乘积,至于这里为什么要确定j,主要是因为如果也拆成dp[j],就没有考虑到拆分成三个数的情况,如果理解有误,请佬佬指点~。

class Solution {
    public int integerBreak(int n) {
        int[] dp = new int[n + 1];
        dp[2] = 1;
        for(int i = 3; i <= n;i++){
            for(int j = 1;j <= i/2;j++){
                dp[i] = Math.max(dp[i],Math.max(j * (i - j),j * dp[i - j]));
            }
        }
        return dp[n];
    }
}

标签:初始化,obstacleGrid,java,int,路径,随想录,拆分,dp
From: https://blog.csdn.net/weixin_46002954/article/details/143855719

相关文章

  • Java 基础 - 字符串类
    字符串类重要的字符串类有String、StringBuilder、StringBuffer1、StringString是不可变类,内部是由final定义的字符数据构成。privatefinalcharvalue[];1.1String类的层次结构如下:String实现了比较接口,字符序列接口,序列化接口,具有以上接口的特性1.2重写了Obje......
  • 关于Java中算法的基础运用与讲解
    1.冒泡排序(BubbleSort)基本思路通过重复遍历要排序的列表,一次比较两个元素,如果它们的顺序错误就交换它们。这个过程会重复进行直到没有更多的交换需要做,这意味着列表已经排序完成。详细步骤外层循环:遍历数组的每个位置i,表示已经进行了多少轮比较。内层循环:从位置0......
  • javaScript交互案例
    1、模态框(弹出框)(1)、需求:点击弹出层,会弹出模态框,并且显示灰色半透明的遮挡层点击关闭按钮,可以关闭模态框,并且同时关闭半透明遮挡层鼠标放在模态框最上面一行,可以按住鼠标拖拽模态框在页面中移动鼠标松开,可以停止拖动模态框移动思路:点击弹出层,模态框和遮挡层就会显示出来d......
  • Java集合框架、集合工具类Collections、泛型 ;代码之滑动窗口总结(11.15)
    Java基础学习迭代器1、迭代器的指针一开始在集合的上方next():指针下移,下移以后返回指针指向的值2、使用迭代器遍历集合元素 //正确写法Iteratoriterator=coll.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}//错误写法,......
  • 营业执照 OCR 识别 API 接口用Java如何调用
    营业执照OCR识别API是一项创新的技术应用,它充分利用了先进的光学字符识别技术,能够快速、准确地读取营业执照上的文字和数字信息。这个接口会自动识别营业执照上的关键数据,包括但不限于公司名称、注册号、法定代表人、公司类型、成立日期、注册资本、营业期限、营业范围等......
  • 「Java EE开发指南」如何使用Visual JSF编辑器设计JSP?(一)
    VisualJSFDesigner的目标是使创建JSF应用程序的特定于组件的工作更容易可视化,在本教程中,您将使用可视化设计器设计JSF登录页面,将学习如何:创建一个JSF项目创建一个新的JSF页面设计JSF页面该功能在MyEclipse中可用。MyEclipsev2024.1离线版下载MyEclipse技术交流群:74233......
  • 一款基于 Java 开发的微信数据分析工具!
    大家好,我是Java陈序员。今天,给大家介绍一款基于Java开发的微信数据分析工具!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍wx-dump-4j——一款基于Java开发的微信数据分析工具。它准确显示好友数、群聊数和当日......
  • 基于Java语言的跑腿_跑腿系统_同城跑腿_同城跑腿
    跑腿_跑腿系统_同城跑腿_同城跑腿源码_校园跑腿_校园跑腿源码_跑腿平台技术框架后台服务springboot+mybatisplus+mysql用户端uniapp(vue语法)管理后台vue+elementUi界面展示                ......
  • 基于JavaSwing开发问卷调查系统源码(SQLServer数据库) 课程设计 大作业
    ......
  • Javaweb开发核心之应用上下文知识(笔记)
     什么是应用上下⽂ServletContext简介:讲解Javaweb作⽤用域对象介绍和ServletContext讲解1.理解应用上下文定义:应用上下文是一个ServletContext对象,表示整个Web应用的全局信息和状态。它在Web应用启动时创建,在应用停止时销毁。作用:全局信息共享:可存储应用范围内......