problem
这个题目前我再LeetCode 没找到相同或是相似的题目,有同学知道的话,可以留言一下
M个苹果放在N个盘子里,有多少种不同的放法?
solution
这个题是我在面试的时候,面试官出的一个题目,当时用的回溯,但是思路不对,面试官还提醒分情况和动态规划,可是着实没有做出来,面试之后就去百度了解答练习了一次。
方法一
思路过程
-
提前是苹果数M>=0,盘子数N>=0
-
对每次分发,都可以如下考虑:
- 如果苹果数小于盘子数(M<=N),一定会存在空盘,那么其实只能在M个盘子中分——f(M,N)=f(M,M)
- 如果苹果数大于等于盘子数(M>=N)(等于的情况必须划分到这里,因为如果在上面一种情况下,会被无限循环)
- 假设每个盘子都有一个苹果,剩下M-N个苹果在N个盘子中分配——f(M,N)=f(M-N,N)
- 假设至少空一个盘子——f(M,N)=f(M,N-1) // 这里思考了一下为什么是N-1,e而没有N-2,因为N-1的情况中包含N-2的情况,N-1个盘中也可以在空一个出来的情况
-
终止条件:
- 盘子数N==1,只能放到这个盘子里,返回一