题解 | #称砝码#

称砝码

http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

let line1 = readline();let line2 = readline();let line3 = readline();
let m = line2.split(' '); //每种砝码的重量
let x = line3.split(' '); //每种砝码对应的数量范围
let fama = []            //序列化砝码,比如两个1g和一个2g的砝码用[1,1,2]表示
for (let i = 0; i < m.length; i++) {
    for (let j = 0; j < x[i]; j++) {
        fama.push(Number(m[i]))
    }
}
let kind = new Set();    //用set表示加入当前砝码之前能产生的重量种类
kind.add(0);            //set初始化为0
// 当第一个1g砝码放入时,set中要插入原先所有元素+1g后的结构,即{0,0+1},插入后变为{0,1}
// 当第二个1g砝码放入时,set要插入{0+1,1+1},变为{0,1,2}
// 第三个2g砝码放入时,set要插入{0+2,1+2,2+2},变为{0,1,2,3,4}
for (let i = 0; i < fama.length; i++) {
    let arr = [...kind]    //用一个数组来缓存当前种类的砝码的值
    for (let k of arr) {
        kind.add(k + fama[i]);
    }
}
console.log(kind.size)

全部评论
这何尝不是一种动态规划,6
点赞 回复 分享
发布于 2023-02-27 14:06 广东
你的// 当第一个1g砝码放入时,set中要插入原先所有元素+1g后的结构,即{0,0+1},插入后变为{0,1};这句话和你的代码就有歧义了,你的代码放入第一个砝码的操作就是插入{0+1},并不是你写的{0,0+1}
点赞 回复 分享
发布于 2022-10-30 09:27 湖南

相关推荐

求面试求offer啊啊啊啊:要求太多的没必要理
点赞 评论 收藏
分享
评论
26
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务