面试题 16.11. 跳水板
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
示例:
输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}
提示:
0 < shorter <= longer
0 <= k <= 100000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diving-board-lcci
思想:题目要求输出所有可能长度,显然,数组长度有k+1
大小,两边的K个多出来一个,所以k+1
个,题目要求排序,直接将shorter多的先进行计算就可以完成排序要求。然后再处理一些特殊情况就可以了。
Java:
class Solution {
public int[] divingBoard(int shorter, int longer, int k) {
if(k==0){ //K=0的情况下
return new int[0];
}
if (shorter == longer) { //shorter等于longer的情况下
return new int[] { k * shorter };
} else { //排除上述两种情况下
int[] arra = new int[k + 1];
arra[0]=shorter*k; //第一个
for(int i=1;i<k;i++){
arra[i]=longer*i+shorter*(k-i);
}
arra[k]=longer*k; //最后一个
return arra;
}
}
}
Python:
class Solution:
def divingBoard(self, shorter: int, longer: int, k: int) -> List[int]:
arra=[]
if k==0:
return arra
elif shorter==longer:
arra.append(shorter*k)
return arra
else:
arra.append(shorter*k)
i=1
while i<k:
arra.append(longer*i+shorter*(k-i))
i+=1
arra.append(longer*k)
return arra