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

动态规划理论基础和习题【力扣】【算法学习day.23】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.不同路径II

题目链接:63. 不同路径 II - 力扣(LeetCode)

题面:

基本分析:和上一篇文章的同步路径项目,只需要知道如果A点是障碍点,那么到A的路径条数为0,如果A在第一行或者第一列,那么A点在第一行的后面的点和在第一列下面的点的路径为0 

代码:

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        return dfs(new HashMap<Pair,Integer>(), obstacleGrid, 0, 0);
    }

    private int dfs(Map<Pair,Integer> cache, int[][] arr, int i, int j) {
      Pair p = new Pair(i,j);
      if(cache.containsKey(p))return cache.get(p);
      if(i>=arr.length||j>=arr[0].length||arr[i][j]==1)return 0;
      if(i==arr.length-1&&j==arr[0].length-1)return 1;
      int ref = dfs(cache,arr,i+1,j)+dfs(cache,arr,i,j+1);
      cache.put(p,ref);
      return ref;
    }
}

2.整数拆分

题目链接:343. 整数拆分 - 力扣(LeetCode)

题面:

基本分析:数学分析可知,要尽可能拆分为3,如果余数是2,就要返回一个3并拆成2*2,因为2*2>1*3,至于为什么,详细可前往力扣题解页看大佬证明

代码:

class Solution {
    int[] arr;
    public int integerBreak(int n) {
        if(n==2)return 1;
        if(n==3)return 2;
        if(n==4)return 4;
        int flag = 1;
        while(n-3>=0){
            flag*=3;
            n-=3;
        }
        if(n==2)return flag*2;
        if(n==1){
            flag/=3;
            return flag*4;
        }
        return flag;
    }
    
}

后言

上面是动态规划的基本概念和部分习题,下一篇会有其他习题,希望有所帮助,一同进步,共勉!   


http://www.kler.cn/a/382185.html

相关文章:

  • 6款IntelliJ IDEA插件,让Spring和Java开发如虎添翼
  • Java实现pdf转图片
  • SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
  • Windows 部署非安装版Redis
  • qt QMenuBar详解
  • 互联网大厂钟爱的压测工具分享,战绩可查!
  • 使用 RabbitMQ 有什么好处?
  • 【大数据学习 | kafka高级部分】文件清除原理
  • 无线振动传感器的安装方法
  • text-embedding-ada-002;BGE模型;M3E模型是Moka Massive Mixed Embedding;BERT
  • react中ref使用支持父调用子组件的方法
  • 基于springboot的音乐网站的设计与实现(源码+lw+调试)
  • 「C/C++」C++标准库 之 #include<iostream> 标准输入输出
  • 酒店管理系统|基于java和小程序的酒店管理小程序系统设计与实现(源码+数据库+文档)
  • 带轴承电枢的一般设计规则
  • MySQL表设计(三大范式 表的设计)
  • 助力你了解人工智能应用场景,分析市场,提高自身竞争力
  • 链表:LRU缓存
  • 算子级血缘助企业数据管理“自动化、精细化、智能化”
  • 自动化研磨领域的革新者:半自动与自动自磨机的技术突破
  • 八大排序总结
  • Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践
  • git创建分支
  • AT6558F高性能BDS/GNSS多模卫星导航接收机SOC单芯片
  • 鸿蒙进阶-AlphabetIndexer组件
  • 掌握 Jest 配置文件:优化单元测试的灵活性与可维护性