将整数 n 分成 k 份,且每份不能为空,任意两个方案不能相同(不考虑顺序)。
例如: n=7,k=3 ,下面三种分法被认为是相同的。
问有多少种不同的分法, 答案对 109 + 7 取模。
数据范围:
进阶:空间复杂度
,时间复杂度 )
class Solution: def divideNumber(self , n: int, k: int) -> int: mod = 10**9 + 7 # dp[i][j] 表示将整数i分成j份 dp = [[0]*(k+1) for _ in range(n+1)] for i in range(k+1): dp[i][i] = 1 for i in range(1,n+1): for j in range(1,min(i,k)+1): dp[i][j] = (dp[i-j][j] + dp[i-1][j-1]) % mod return dp[n][k]