题目:
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter
,长度较长的木板长度为longer
。你必须正好使用k
块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
示例:
输入:
shorter = 1
longer = 2
k = 3
输出: [3,4,5,6]
解释:
可以使用 3 次 shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。
解题思路:
1.首先考虑两种特殊情况:
k=0,使用0块木板,直接返回一个空数组即可
shorter=longer,两个板长度相同,返回任意一个板的长度*k
2.其余正常情况,我们可以看的出会有k+1种情况,使用0块短板--使用k块短板,所以我们这里设置循环初始值为0,循环结束条件是<=k
3.题目要求返回的长度需要从小到大排序,所以我们在最后还需要用到sort()函数,将结果数组进行排序
Code:
class Solution {
public:
//计算总长度
int total(int shorter, int longer, int k,int n,int m)
{
int sum=shorter*n+longer*m;
return sum;
}
vector<int> divingBoard(int shorter, int longer, int k) {
vector<int> res;
//如果k为0,返回空数组
if(k==0) return res;
//如果短板和长板长度相同,返回任意一个板*k
if(shorter==longer)
{
res.push_back(k*shorter);
return res;
}
//其他正常情况
for(int i=0;i<=k;i++)
{
//将每一次结果添加到res中
res.push_back(total(shorter,longer,k,i,k-i));
}
//按升序顺序排序
sort(res.begin(),res.end());
//返回结果数组
return res;
}
};