登录
转载

leetcode-面试题 16.11 - 跳水板

发布于 2025-01-07 阅读 49
  • GitHub
  • LeetCode
转载

0708 - 面试题 16.11 - 跳水板

二 题目

你正在使用一堆木板建造跳水板。

有两种类型的木板,
其中长度较短的木板长度为 shorter,
长度较长的木板长度为 longer。

你必须正好使用 k 块木板。

编写一个方法,生成跳水板所有可能的长度。

返回的长度需要从小到大排列。

示例:

输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}

提示:

0 < shorter <= longer
0 <= k <= 100000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diving-board-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
 * @param {number} shorter
 * @param {number} longer
 * @param {number} k
 * @return {number[]}
 */
var divingBoard = function(shorter, longer, k) {

};

根据上面的已知函数,小伙伴们可以先尝试破解本题,确定了自己的答案后再看下面代码。

三 解题思路

直接暴力破解:

/**
 * @param {number} shorter
 * @param {number} longer
 * @param {number} k
 * @return {number[]}
 */
const divingBoard = (shorter, longer, k) => {
  // 1. 定义递减数字以及结果集
  let sk = k,
    lk = k,
    result = new Set();

  // 2. 收集 shorter 为主的可能
  while (sk) {
    result.add(shorter * sk + (k - sk) * longer);
    sk--;
  }
  // 3. 收集 longer 为主的可能
  while (lk) {
    result.add(longer * lk + (k - lk) * shorter);
    lk--;
  }

  // 4. 返回最终结果
  return [...result];
};

console.log(divingBoard(1, 2, 3));

然后缩减一次 while 遍历:

const divingBoard = (shorter, longer, k) => {
  // 0. 去掉不合理
  if (!k) {
    return [];
  }
  
  // 1. 定义递减数字以及结果集
  let newK = k,
    result = new Set();

  // 2. 收集所有可能
  while (newK >= 0) {
    result.add(shorter * newK + (k - newK) * longer);
    newK--;
  }

  // 3. 返回最终结果
  return [...result];
};

四 统计分析

本题不需要统计分析。

知识共享许可协议
jsliang 的文档库梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。

评论区

leon
1粉丝

励志做一条安静的咸鱼,从此走上人生巅峰。

0

0

4

举报