Skip to content

LeetCode 面试题 16.11. 跳水板 简单

作者:Choi Yang
更新于:6 个月前
字数统计:553 字
阅读时长:2 分钟
阅读量:

题目描述

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为 shorter,长度较长的木板长度为 longer。你必须正好使用 k 块木板。编写一个方法,生成跳水板所有可能的长度。

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

示例 1

javascript
输入:
shorter = 1
longer = 2

k = 3
输出: [3,4,5,6]
解释:
可以使用 3 次 shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。

提示:

javascript
0 < shorter <= longer;
0 <= k <= 100000;

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/diving-board-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

排列组合也算比较简单,需要 k 个板子,当我们短板有 i 个的时候,长板子就是 k-i 个,由于题目要求是将结果从小到大进行排序,那么我们起初就尽可能多的取短板子,最后结果就是通过 [0,k] 范围内遍历一遍即可。

对于特殊情况,即短板和长板长度相同时,我们只需要返回 k*len 即可,不然会重复计算。

javascript
var divingBoard = function (shorter, longer, k) {
  if (k === 0) return [];
  if (shorter === longer) return [k * shorter];
  let res = [];
  for (let i = k; i >= 0; i--) {
    let shortCnt = i;
    let longCnt = k - i;
    let cnt = shortCnt * shorter + longCnt * longer;
    res.push(cnt);
  }
  return res;
};
cpp
class Solution {
public:
    vector<int> divingBoard(int shorter, int longer, int k) {
        if (k == 0) return {};
        if (shorter == longer) return {k * shorter};
        vector<int> res;
        for (int i = k; i >= 0; i--) {
            int shortCnt = i;
            int longCnt = k - i;
            int cnt = shortCnt * shorter + longCnt * longer;
            res.push_back(cnt);
        }
        return res;
    }
};
java
class Solution {
    public int[] divingBoard(int shorter, int longer, int k) {
        if (k == 0) return new int[0];
        if (shorter == longer) return new int[]{k * shorter};
        int[] res = new int[k + 1];
        for (int i = 0; i <= k; i++) {
            int shortCnt = i;
            int longCnt = k - i;
            int cnt = shortCnt * shorter + longCnt * longer;
            res[i] = cnt;
        }
        return res;
    }
}
python
class Solution:
    def divingBoard(self, shorter: int, longer: int, k: int) -> List[int]:
        if k == 0: return []
        if shorter == longer: return [k * shorter]
        res = []
        for i in range(k + 1):
            shortCnt = i
            longCnt = k - i
            cnt = shortCnt * shorter + longCnt * longer
            res.append(cnt)
        return res
javascript
学如逆水行舟,不进则退

Contributors

Choi Yang