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
};

本文完,感谢阅读。

相关推荐
Coovally AI模型快速验证11 分钟前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun15 分钟前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
烛阴29 分钟前
TypeScript高手密技:解密类型断言、非空断言与 `const` 断言
前端·javascript·typescript
RaymondZhao341 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
艾伦~耶格尔1 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
zhangfeng11331 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
样子20181 小时前
Uniapp 之renderjs解决swiper+多个video卡顿问题
前端·javascript·css·uni-app·html
Nicholas681 小时前
flutterAppBar之SystemUiOverlayStyle源码解析(一)
前端
一只叫煤球的猫1 小时前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
黑客飓风2 小时前
JavaScript 性能优化实战大纲
前端·javascript·性能优化