将整数 n 分成 k 份,且每份不能为空,任意两个方案不能相同(不考虑顺序)。
例如: n=7,k=3 ,下面三种分法被认为是相同的。
问有多少种不同的分法, 答案对 109 + 7 取模。
数据范围:
进阶:空间复杂度
,时间复杂度 )
对于dp[i][j]代表i分为j份。分为以下两类:
function divideNumber( n , k ) {
// write code here
const dp = Array.from(new Array(n+1), ()=>new Array(k+1).fill(0))
dp[0][0] = 1
for (let i=1;i<=n;++i){
for (let j=1;j<=n;++j){
if ( i-j>=0){
dp[i][j]=dp[i-j][j]+dp[i-1][j-1];
}
}
}
return dp[n][k]
}