"""
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
示例:
输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}
"""
# 思路一 自己写的笨方法
class Solution:
def divingBoard(self, shorter: int, longer: int, k: int):
list_result = []
for i in range(k + 1):
shorter_len = shorter * (k - i)
longer_len = longer * i
len_ = shorter_len + longer_len
if len_ == 0:
continue
list_result.append(len_)
if shorter == longer:
break
return list_result
# 思路二 网上的优解
class Solution(object):
def divingBoard(self, shorter: int, longer: int, k: int):
ret = []
# 首先考虑k == 0的情况
if k == 0:
return ret
# shorter和longer相等,则结果永远是只有一个
if shorter == longer:
ret.append(shorter * k)
return ret
# 每增加一个长跳板,总长度必然增加longer - shorter,而且一共有k+1种组合方式
# 所以只需要从最小长度开始叠加,最大长度则是longer * k ,最小长度则是 shorter * k
dist = longer - shorter
len_min = shorter * k
len_max = longer * k
# 这里面用range来直接生成列表
ret = list(range(len_min, len_max + 1, dist))
return ret
s = Solution()
print(s.divingBoard(1, 1, 1000))
leetcode 面试题16.11 跳水板
最新推荐文章于 2021-03-15 00:08:02 发布