例三:列出所有组合
设计思路:
数组是1234,任取其中的2个元素作为一个组合,共有6种取法:
把问题规模缩小(缩小一个规模):
精确描述:
/**
* Generates all combinations and output them,
* selecting n elements from data.
*/
Generates all combinations and output them,
生成所有组合并输出它们
selecting n elements from data.
从数据中选择n个元素
代码细节:
递归框架:
解决3个问题
- 从空集中选取0个元素,有1种选法,选出来的是一个空的集合。
- 从空集中选取1/2/…个元素,有0种选法,不输出。
解决【n==0】,同样也解决了【n<0】,所以删除【n<0】
合并:
在【n==0】的情况下,不管data是不是empty,都有一种输出:空值
所以:
简化代码后:
基准值(初始值)改好了
思考:
- 【n==0】本身是一个empty list
- n怎么会=0?因为前面把n个元素选光了
所以:
【n==0】output不是empty list,而是output all selected eLements
添加:List selected
添加:
添加:
输出结果:
非常大一串,自己试试吧
详情代码请看这里~
给个小星星鼓励一下吧~❤谢谢❤
要点:
1. 多个参数初始值(data,n)
- 先分开考虑
- 然后把条件合起来
2. Side-effect的维护(selected:维护所有之前选择的元素)