题解 | #称砝码#

称砝码

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

讲真 个人感觉这道题难度不止中等 可以定义为较难 解法很巧妙 完整代码如下:
while (n = readline()) {
    //定义重量类型数组并且通过map()方法将数组内元素转换为Number类型
    let weight = readline().split(' ').map(Number);
    //定义数量数组并且通过map()方法将数组内元素转换为Number类型
    let num = readline().split(' ').map(Number);
    //新建count Object用来统计后面总共可以称多少种不同的重量
    let count = {0: true};
    // 第一重循环————遍历weight数组
    for (let i = 0; i < weight.length; i++) {
        // 从count中取keys组成数组并且将数组内元素转换为Number类型(该数组元素会随着遍历实时更新)
        let current = Object.keys(count).map(Number);
        // 第二重循环————遍历num数组
        for (let j = 1; j <= num[i]; j++) {
            //第三重循环———遍历实时更新的current数组内元素
            current.forEach(item => {
                let val = item + j * weight[i];
                count[val] = true;
            })   
        }
    }
    //输出最终count长度,即可称重量的可能性总数
    console.log(Object.keys(count).length);
}        
补充:这里面最关键的是“0”的妙用,该答案也是查找其他朋友的答案,如果让我来想,是打破脑袋可能也想不出,正因为理解了
之后觉得太妙了,所以分享出来,写完之后还有些意犹未尽。

全部评论

相关推荐

09-18 20:41
门头沟学院 Java
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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