题目
分析思路
运用数学方法,考虑以下情况
1.k=0,则不能建造任何跳水板,返回空;
2.shorter=longer 短跳水板长度=长跳水板长度,那么建造跳水板的长度是唯一的,都是shorter,返回一个长度为1,组中元素为shorter * k的数组;
3.一般情况 shorter 不等于longer 且k>0,此时默认全部用短木板是一种,然后每多替换一个短木板为长木板就是一种新组合,因此又有k种组合,所以一共有k+1种长度
接下来判断两种组合,
1>有 i块长木板,则跳水板的长度是 shorter*(k-i)+longer* i;
2>有 k-i块长木板,则跳水板的长度是 shorter * i+longer * (k-i);
则两种不同的组合下的跳水板长度之差为
-shorterk-longer(k-2i) <0
由此可见,任意两种不同的组合下的跳水板长度都是不一样的,而且使用的长木板越多,跳水板的长度越大
于是给出以下代码(golang)
func divingBoard(shorter int, longer int, k int) []int {
length :=make([]int,k+1)
if k==0{
return nil //判断k是否为0
}
if shorter == longer{
return []int{shorter*k} //判断短跳水板和长跳水板长度是否相同
}
for i:=0;i<=k;i++{
length[i]=shorter*(k-i)+longer*i //从小到大输出所有可能
return length
}