30天刷题挑战(二十一)

题目来源: LeetCode 75 30 天 JavaScript 挑战

216. 组合总和 III

思路

回溯法,从 1 开始,使用一个数组表示数字组合,递归的终止条件是数组长度等于 k, 如果数组和 sum 等于 n 那么就将这个数组添加到最终结果去。

代码

js 复制代码
/**
 * @param {number} k
 * @param {number} n
 * @return {number[][]}
 */
var combinationSum3 = function(k, n) {
  const res = []
 
  let start = 1

  const back = (path, start, sum) => {
    if (path.length === k) {
      if (sum === n) {
        res.push(path.slice(0))
      }
      return
    }

    console.log(path)
     
    for (let i = start; i <= 9; i++) {
      path.push(i)
      back(path, i + 1, sum + i)
      path.pop()
    } 

  }

  back([], start, 0)
  
  return res
};

1137. 第 N 个泰波那契数

思路

动态规划,直接递归会超时,所以需要缓存计算结果,使用 4 个变量缓存计算结果,返回前三个数的和。

代码

js 复制代码
// 超时
// var tribonacci = function(n) {
//   let t0 = 0
//   let t1 = 1

//   if (n === 0) {
//     return t0
//   }

//   if (n < 3) {
//     return t1
//   }

//   return tribonacci(n - 3) + tribonacci(n - 2) + tribonacci(n - 1)
// };


/**
 * @param {number} n
 * @return {number}
 */
var tribonacci = function(n) {
  if (n === 0) {
    return 0
  }

  if (n <= 2) {
    return 1
  }

 let t0 = 0
 let t1 = 0
 let t2 = 1
 let tn = 1

 for (let i = 3; i <= n; i++) {
   t0 = t1
   t1 = t2
   t2 = tn
   tn = t0 + t1 + t2
 }

  return tn
};

746. 使用最小花费爬楼梯

思路

动态规划,先声明前两步的花费,从 2 开始计算到楼梯顶每次花费较小的值,然后更新前两步的花费,返回最后一步的花费值即可。

代码

js 复制代码
/**
 * @param {number[]} cost
 * @return {number}
 */
var minCostClimbingStairs = function(cost) {
   let dp0 = 0
   let dp1 = 0

  for (let i = 2; i <= cost.length; i++) {
    const next = Math.min(dp1 + cost[i - 1], dp0 + cost[i - 2])
    dp0 = dp1
    dp1 = next
  }

  return dp1
};

本文完,感谢阅读。

相关推荐
焦耳加热1 小时前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
wan5555cn1 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u6062 小时前
常用排序算法核心知识点梳理
算法·排序
2501_915918412 小时前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
程序员的世界你不懂3 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
索迪迈科技3 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
在未来等你3 小时前
Kafka面试精讲 Day 13:故障检测与自动恢复
大数据·分布式·面试·kafka·消息队列
gnip3 小时前
JavaScript二叉树相关概念
前端
蒋星熠4 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
attitude.x4 小时前
PyTorch 动态图的灵活性与实用技巧
前端·人工智能·深度学习