Skip to content

跳水板-面试题 16.11  #118

Description

@sl1673495

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

这个排列组合很简单,设 i 是使用短木板的数量,当你用了 i 个 shorter 的话,那么一定只剩下k - i的 longer,所以 i 在 [0, k] 的范围里做一次遍历,分别把得到的结果都加到 res 数组里即可。

注意特殊情况:

  • k = 0 直接返回空数组。
  • shorter = longer 的时候,直接返回 [shorter * k]。
/**
 * @param {number} shorter
 * @param {number} longer
 * @param {number} k
 * @return {number[]}
 */
let divingBoard = function (shorter, longer, k) {
    if (k === 0) {
        return []
    }
    if (shorter === longer) {
        return [k * shorter]
    }

    let res = []
    for (let i = 0; i <= k; i++) {
        let longCount = i
        let shortCount = k - i
        res.push(shortCount * shorter + longCount * longer)
    }

    return res
};

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions