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

本文完,感谢阅读。

相关推荐
正在绘制中8 分钟前
Java重要面试名词整理(八):RabbitMQ
java·面试·java-rabbitmq
顾平安10 分钟前
手写 PromiseA+ 实现,轻松通过 872 条用例
前端
c1assy12 分钟前
DP动态规划+贪心题目汇总
数据结构·算法·leetcode·贪心算法·动态规划
胡西风_foxww13 分钟前
【ES6复习笔记】对象方法扩展(17)
前端·笔记·es6·对象·方法·扩展·对象方法扩展
jjjxxxhhh12314 分钟前
C++ 模板是为了解决啥问题
开发语言·c++·算法
c++初学者ABC20 分钟前
GESP2级2403 小杨的日字矩阵
c++·算法
大写-凌祁39 分钟前
2024国赛A题第一问
线性代数·算法·机器学习·数学建模
bin915344 分钟前
npm报错
前端·npm·node.js
代码小将1 小时前
PTA数据结构编程题7-1最大子列和问题
数据结构·c++·笔记·学习·算法
一指流沙q1 小时前
Chrome被360导航篡改了怎么改回来?
前端·chrome