每次分配一个苹果出去,然后再分配N-1个苹果。这里有个注意的地方就是,分那1个苹果的时候,假设还有N个苹果,不是从第一个人开始分,而是从N+1个苹果分配的位置开始,不然的话会产生重复的解。所以i=p不是i=0。

List<Integer> result = Lists.newArrayList(0, 0, 0);

@Test
/**
* N个苹果 M个人分
*/
public void testMN() {
foo(3, 3, 0);
} private void foo(int n, int m, int p) {
if (n == 0) {
System.out.println(result);
return;
}
for (int i=p; i<m; i++) {
result.set(i, result.get(i) + 1);
foo(n-1, m, i);
result.set(i, result.get(i) - 1);
}
}

output

[3, 0, 0]
[2, 1, 0]
[2, 0, 1]
[1, 2, 0]
[1, 1, 1]
[1, 0, 2]
[0, 3, 0]
[0, 2, 1]
[0, 1, 2]
[0, 0, 3]

最新文章

  1. javascript介绍
  2. 转载---ViewPager,PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter的分析对比
  3. 阅读 图解HTTP ,读书笔记
  4. 相同的问题又出现了,struts2取不出数值
  5. 20道C#练习题(二)11——20题
  6. sql 取时间 问题集
  7. DXP 技巧和龙芯3A装机
  8. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码
  9. ES6 常用语法
  10. [Swift]LeetCode733. 图像渲染 | Flood Fill
  11. H5与企业微信jssdk集成
  12. 五. Redis持久化
  13. ERROR 1215 (HY000): Cannot add foreign key constraint
  14. HTTP redirect 重定向到 HTTPS
  15. 【MAVEN】如何在Eclipse中创建MAVEN项目
  16. centos7 yum安装配置redis 并设置密码
  17. js和.net后台交互
  18. 家用wifi信号覆盖增强扩展实用指南
  19. luoguP4868 Preprefix sum
  20. 玲珑杯”ACM比赛 Round #4 1054 - String cut 暴力。学到了扫描的另一种思想

热门文章

  1. c之指针与数组(2)Dynamic Data Structures: Malloc and Free--转载
  2. 【Echo】实验 -- 实现 C/C++下TCP, 服务器/客户端 通讯
  3. 行人检测4(LBP特征)
  4. jquery操作radio单选按钮,实现取值,动态选中,动态删除的各种方法
  5. word转pdf(使用office)
  6. PHP高级工程师面试 - 笔试题
  7. SpringBoot之整合MyBatis
  8. 【SSH网上商城项目实战23】完成在线支付功能
  9. 使用 NamedScope 扩展 Ninject 的 InRequestScope
  10. 记录一次使用terminal进行git管理与提交到Github的过程