【小白用python刷Leetcode】面试题 16.11. 跳水板

面试题 16.11. 跳水板

题目描述

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

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

示例:

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

提示:

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

 

解题思路

不愧是简单题,这也太简单了。其实就是给k个数字,这k个数字只有两种,一大一小,然后求这k个数的和是多少,将所有可能情况从小到大排列。

思路么也简单得很,i是较大数的个数,那么(k-i)就是较大数的个数。i一共只有(k+1)种情况,分别是0到k,遍历i就好了。特别需要注意,如果shorter = longer的话,直接返回k*shorter并封装在list中就好。

题解代码:

def divingBoard(self, shorter: int, longer: int, k: int) -> List[int]:
        res = []
        if k == 0:
            return res
        if shorter == longer:
            res.append(k*shorter)
            return res
        for i in range(k+1):
            tmp = shorter * (k-i) + longer * i
            res.append(tmp)
        return res  # 这两行不能缩成一行return res.append(tmp),答案会错,我也不知道为啥

时间复杂度O(k),空间复杂度O(1)。

运行结果:

【小白用python刷Leetcode】面试题 16.11. 跳水板_第1张图片

幸好题简单,趁着晚饭时间稍微写一下

原题链接:

https://leetcode-cn.com/problems/diving-board-lcci/

你可能感兴趣的:(小白刷Leetcode)