加盟平台响应网站建设百度云官网入口
题目:
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为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;//如果短板和长板长度相同,返回任意一个板*kif(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;}
};