题解 | #称砝码#

称砝码

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”的妙用,该答案也是查找其他朋友的答案,如果让我来想,是打破脑袋可能也想不出,正因为理解了
之后觉得太妙了,所以分享出来,写完之后还有些意犹未尽。

全部评论

相关推荐

02-01 19:48
门头沟学院 Java
神哥了不得:(非引流)直接暑期吧,没时间日常了,老鱼简历把水印去了,或者换个模板,简历字体大小都不太行,建议换2个高质量的项目,面试应该还会再多一些
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务