16.11 跳水板问题

题目描述:

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

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

示例 1

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diving-board-lcci

解题思路

两种类型的跳水板,可以计算出得到的结果是K+1个结果;
关键点

  1. 抽象出 单个的result结果,result = shorter * (k - i) + longer * i
    (i是 0~k 的区间)。
  2. 所以结合迭代方法,核心的代码部分
  for i in range(k + 1):
            result[i] = shorter * (k - i) + longer * i
  1. 考虑特殊的情况
    case1: k<=0, 那么返回空的列表就好;
    case2: shorter = longer , 那么仅仅有一个结果,就是 [shorter*k]

完整的代码 (Python)

class Solution:
    def divingBoard(self, shorter: int, longer: int, k: int) -> List[int]:
        if k <= 0:
            return []
        if shorter == longer:
            return [shorter*k]
        result = [0] * (k + 1)
        for i in range(k + 1):
            result[i] = shorter * (k - i) + longer * i
        return result

执行效果如下

1611.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容