码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • leetcode 刷题 log day 45


    • 70. 爬楼梯 (进阶)
      【思路】要上的台阶数就是背包容量,每次只能上一个台阶或者两个台阶,就是物品的值。因为要考虑排列顺序,所以先遍历背包后遍历物品,分析完毕套公式~

      // 斐波那契做法
      var climbStairs = function(n) {
          let dp = [0, 1, 2];
          for (let i = 3; i <= n; i++) {
              dp[i] = dp[i - 1] + dp[i - 2];
          }
          return dp[n];
      };
      
      // 动态规划:完全背包
      var climbStairs = function(n) {
        let dp = new Array(n + 1).fill(0);
        dp[0] = 1;
        for (let i = 1; i <= n; i++) {  // 因为是求排列,要考虑顺序,所以是先遍历背包后遍历物品 
          for (let j = 1; j <= 2; j++) {
            if (i >= j) dp[i] += dp[i - j];
          }
        }
        return dp[n];
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
    • 322. 零钱兑换
      【思路】背包容量为 amount,因为要求最少硬币个数,所以公式取最小值,为 dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1),每次上一个硬币个数上加一个硬币(求个数的话才加一,求有多少种方法就不加一:dp[j] += dp[j - nums[i]])。因为只求个数不看顺序,所以遍历顺序随意~

      var coinChange = function(coins, amount) {
        let dp = new Array(amount + 1).fill(Infinity);
        dp[0] = 0;
        
        for (let i = 0; i < coins.length; i++) {
          for (let j = coins[i]; j <= amount; j++) {
            dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
          }
        }
        
        return dp[amount] !== Infinity ? dp[amount] : -1;
      };
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    • 279. 完全平方数
      【思路】可以把 n 看作背包容量,那么物品就是自然数,值就是自然数的平方。因为又是求个数,所以公式里有 +1。

      var numSquares = function(n) {
        let dp = new Array(n + 1).fill(Infinity);
        dp[0] = 0;
      
        for (let i = 1; i * i <= n; i++){
          for (let j = i * i; j <= n; j++) {
            dp[j] = Math.min(dp[j], dp[j - i * i] + 1);
          }
        }
        return dp[n];
      };
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    参考代码随想录:https://www.programmercarl.com/

  • 相关阅读:
    7-10 成绩排序
    iOS 列表页面实时刷新解决方案
    【科学文献计量】metaknowledge创建和处理知识网络的方法与 RC.networkCoAuthor()中的参数解释
    Flask(Jinja2) 服务端模板注入漏洞(SSTI)
    【刷题记录14】Java工程师丨腾讯面试真题(2)
    【微服务】一体化智慧工地管理平台源码
    Allegro DFM Ravel Rule检查工具介绍
    【Java八股文总结】之消息队列
    golang:context
    设计模式-桥接模式(Kotlin)
  • 原文地址:https://blog.csdn.net/weixin_44473700/article/details/128041354
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号