题解 | #放苹果#
放苹果
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) })();