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

本文完,感谢阅读。

相关推荐
秋夫人14 分钟前
B+树(B+TREE)索引
数据结构·算法
Redstone Monstrosity15 分钟前
字节二面
前端·面试
东方翱翔22 分钟前
CSS的三种基本选择器
前端·css
Fan_web1 小时前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
梦想科研社1 小时前
【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)
开发语言·算法·数学建模·matlab·无人机
Milo_K1 小时前
今日 leetCode 15.三数之和
算法·leetcode
yanglamei19621 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝1 小时前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
Darling_001 小时前
LeetCode_sql_day28(1767.寻找没有被执行的任务对)
sql·算法·leetcode
AlexMercer10121 小时前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法