递归实现组合型枚举

问题描述

的整数中选出个,输出所有的选择方案。

输出格式:对于每种方案,从小到大空格隔开;对于不同的方案,字典序升序输出。

数据范围

输入样例

输出样例

解题思路

类似于递归实现指数型枚举,我们只需要在选取数量恰好是的时候再输出就行了。

但是需要注意的是,数据范围变成了25。所以需要剪枝,即在已经不可能达到最终结果的时候提前退出递归。

这一题如果选取的元素已经大于个了,就不可能正好选个了,就需要退出。同理,如果所选元素的个数加上剩下的所有元素也达不到,也需要退出。

如果把上一题的代码直接搬过来,加上剪枝,就是:

运行会发现结果是倒序的,大的结果在前面

这是由 我们先不选第个元素再选第个元素 造成的。

而第个元素是比较小的(从小到大递归),本来应该在前面才对。

所以我们只需要调整一下pushpop的顺序即可。

总的就为: