你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为 shorter,长度较长的木板长度为 longer。你必须正好使用 k 块木板。
编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}
这道题有点秀逗了,都不太相信逻辑就那么简单,抱着试试看到心态提交下居然还过了,-_-||
k 递增(i),长度=较长 Xi+较短 X(k-i)
/**
* @param {number} shorter
* @param {number} longer
* @param {number} k
* @return {number[]}
*/
var divingBoard = function (shorter, longer, k) {
let _result = []
for (let i = 0; i <= k; i++) {
let long = longer * i + (k - i) * shorter
if (long && !_result.includes(long)) {
_result.push(long)
}
}
return _result
}
用时成功击败了 9.21% -_-||
优化下:
特殊情况
/**
* @param {number} shorter
* @param {number} longer
* @param {number} k
* @return {number[]}
*/
var divingBoard = function (shorter, longer, k) {
let _result = []
if (k === 0) return _result
if (shorter === longer) return [shorter * k]
for (let i = 0; i <= k; i++) {
let long = longer * i + (k - i) * shorter
if (long && !_result.includes(long)) {
_result.push(long)
}
}
return _result
}
得,用时成了 7.02% 可怕
再检查下,includes 这部分之前是判断重复的,那换成去重方式再试下:
只要与最后一位不同就说明不重复
/**
* @param {number} shorter
* @param {number} longer
* @param {number} k
* @return {number[]}
*/
var divingBoard = function (shorter, longer, k) {
let _result = []
if (k === 0) return _result
if (shorter === longer) return [shorter * k]
for (let i = 0; i <= k; i++) {
let long = longer * i + (k - i) * shorter
if (long && _result[_result.length - 1] !== long) {
_result.push(long)
}
}
return _result
}
66.67%,就这吧,还要啥自行车,话又说回来,今天的每天一题确实有点…简陋
博客: 小书童博客
公号: 坑人的小书童