每日一解 简单问题跳水板

题目 跳水板

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。

示例:
输入:shorter = 1,longer = 2,k = 3
输出: {3,4,5,6}

提示:
0 < shorter <= longer
0 <= k <= 100000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diving-board-lcci

思路

前一阵子难题见多了,这个题目刚看的时候还在想是不是动态规划什么的。后来仔细一想根本不需要这么麻烦。很明显,最小值就是shorter × k,最大值则是longer × k。介于中间的就是shorter × (k - 1) + longer × 1,shorter × (k - 2) + longer × 2 …………shorter × 1 + longer × (k - 1)。
那么代码实现也就是水到渠成的难度了:

class Solution {
public:
	vector<int> divingBoard(int shorter, int longer, int k) {
		vector<int> answer;
		if (k == 0) {
			return answer;
		}
		answer.push_back(shorter * k);
		if (shorter == longer) {
			return answer;
		}
		int minus = longer - shorter;
		int min_length = shorter * k;
		for (int i = 1; i <= k; i++) {
			answer.push_back(min_length + minus * i);
		}
		return answer;
	}
};

其中k居然可以为0,注意判断下边界条件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值