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