Leetcode 每日一题 跳水板(golang)

题目
在这里插入图片描述
分析思路

运用数学方法,考虑以下情况
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
	}

猜你喜欢

转载自blog.csdn.net/qq_46595591/article/details/107210761