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

本文完,感谢阅读。

相关推荐
梦想画家11 分钟前
Apache AGE实战指南:从Cypher语法到核心图算法
算法·cypher·apache age
刀法如飞28 分钟前
Go数组去重的20种实现方式,AI时代解决问题的不同思路
后端·算法·go
旖-旎1 小时前
深搜练习(N皇后)(10)
c++·算法·深度优先·力扣
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第30题:JDK动态代理和CGLIB动态代理有什么区别
java·开发语言·后端·面试·代理模式
言萧凡_CookieBoty1 小时前
AI 编程省 Token 实战:从 Spec、上下文工程到模型分层的降本策略
前端·ai编程
DFT计算杂谈1 小时前
wannier90 参数详解大全
java·前端·css·html·css3
Controller-Inversion2 小时前
322. 零钱兑换
算法
头发够用的程序员2 小时前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试
淡海水2 小时前
【AI模型】模型量化技术详解
人工智能·算法·机器学习
炸膛坦客2 小时前
嵌入式 - 数据结构与算法:(1-1)数据结构 - 顺序表(Sequential List)
数据结构·算法·嵌入式