题目描述:
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
示例:
输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}
提示:
0 < shorter <= longer
0 <= k <= 100000
方法1:
主要思路:
(1)这里先说两种特殊的情形,一个是 k =0,则直接返回空结果即可,另一个是长短板子相同,则只需返回一种组成情形即可;
(2)一般的情形,可以先计算出长短板子之差,然后将只使用短板子的组成情形压入结果中,既sum=shorter*k; 随后,只需逐个添加板子之差,知道添加 k 个即可,就相当于逐渐的从全部短板子过渡到全部的长板子,将每一种组合压入结果即可;
class Solution {
public:
vector<int> divingBoard(int shorter, int longer, int k) {
if(k==0)//返回特殊情形1
return vector<int>();
int tmp=longer-shorter;//找出板子之差
int sum=shorter*k;//将全部的短板子先压入到结果
vector<int> res;
res.push_back(sum);
if(tmp==0)//返回特殊情形2
return res;
while(k--){//逐渐的从全部短板子过渡到全部长板子
sum+=tmp;
res.push_back(sum);
}
return res;
}
};