题解 | #称砝码#

称砝码

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

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    // while(line = await readline()){
    //     // let tokens = line.split(' ');
    //     // let a = parseInt(tokens[0]);
    //     // let b = parseInt(tokens[1]);
    //     // console.log(a + b);
    // }

    //不同的种类之间可以联合 同一个种类不同的数量需要枚举
    let typeNum = await readline();
    typeNum = +typeNum;
    let typeStr = await readline();
    let typeList = typeStr.split(" ").map((item)=>+item);
    let numStr = await readline();
    let numList = numStr.split(" ");
    // let typeEnumMatrix=typeList.map((weight,i)=>{
    //     let num=+numList[i]
    //     let list=new Array((num+1)).fill(0).map((num,i)=>{
    //         return (i)*weight
    //     })
    //     return list
    // })
    //  注意如果使用typeEnumMatrix  内存会溢出 
    // 第二个是不同作用域的变量尽量不要重复 ,如果子作用域的变量跟父级重复,有可能取不到父级作用域的值
    let res=typeList.reduce((prevSet,item,i)=>{
        // let countList=[]
        let prev=[...prevSet]
        let num=+numList[i]
        let typeNum=typeList[i]
        for(let i=0;i<prev.length;i++){
            let pItem=prev[i]
            for(let j=0;j<=num;j++){
                let single=j*typeNum
                let addNum=single+pItem
                if(!prevSet.has(addNum)){
                    prevSet.add(addNum)
                }
            }
        }
        // console.log(prevSet)
        return prevSet
    },new Set([0]))
    console.log(res.size)
})();

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务