leetcode原题: 跳水板

题目:

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为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 divingBoard(int shorter, int longer, int k) {
        vector 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;
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展,数据结构,c++)