题解 | #放苹果#

放苹果

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

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 line = await readline();
    const [m, n] = line.split(/\s+/).map((item) => {
        return +item;
    });
    // 排列组合  事件复杂度没有问题,空间复杂度过不了
    // // console.log(n,m)
    // const mL = new Array(m).fill(0);
    // const res = new Set();
    // const list = [];
    // function occ(i) {
    //     if (i == n) {
    //         list.push(mL.toString());
    //         return;
    //     }
    //     for (let j = 0; j < m; j++) {
    //         mL[j]++;
    //         occ(i + 1);
    //         mL[j]--;
    //     }
    // }
    // occ(0);
    // list.forEach((item) => {
    //    let temp= Array.from(item).sort();
    //     // console.log(temp.toString())
    //     if (!res.has(temp.toString())) {
    //         res.add(temp.toString());
    //     }
    // });

    // console.log(res.size);

    // m<n  至少有n-m个盘子空着,确定的  大问题转换成小问题  (m,n-m)
    // m>n 盘子不空 (m-n,n)   盘子有空的 (m,n-1)
    // 定义 fn(m,n-1) 是 把m个苹果放到最多n个盘子里去  
    //  m==1  return 1 n==1 return 1 
    function occ2(m,n){
        if(m==0||m==1||n==1||n==0){
            return 1
        }
        if(m<n){
            return occ2(m,m)
        }else{
            return occ2(m-n,n)+occ2(m,n-1)
        }
    }
    let res=occ2(m,n)
    console.log(res)
})();

全部评论

相关推荐

03-25 17:53
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务