面试题 16.11. 跳水板
题目要求:
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
- 0 < shorter <= longer
- 0 <= k <= 100000
解题思路:
- 先判断特殊情况(长短木板相等;k=0)
- 遍历短木板从k-0的个数与长木板组成的每种可能;并保存在一个数组中
- (见注释)
题解代码:
class Solution:
def divingBoard(self, shorter: int, longer: int, k: int) -> List[int]:
#构建一个保存所有可能的长度数组
lenlist = []
#判断使用0快木板返回空
if k == 0:
return []
#判断长木板和短木板时候相等(相等只有一种可能的长度)
if shorter == longer:
return [shorter*k]
#当不相等时,遍历每种可能的短木板个数,并将每种可能的长度保存在长度数组lenlist中
for i in range(k,-1,-1):
lenlist.append(shorter*i + longer*(k-i))
return lenlist
(“The deepest principle in human nature is the craving to be appreciated.(人类最深刻的本能就是被欣赏的欲望。)
”FIGHTING. . . .)