#YHM12004. 子集生成

子集生成

题目:子集生成

题目描述

给定一个正整数 n,要求生成从 1 到 n 的所有子集,并按照字典序输出这些子集。子集可以为空集,也可以包含 1 到 n 中的任意数量的元素。请使用递归的方法解决该问题。

输入格式

一个正整数 n,其中 1 <= n <= 10

输出格式

输出所有子集,每个子集占一行,子集中的元素按升序排列,元素之间用空格分隔。空集用空行表示。子集按照字典序排列输出。

示例

  • 输入
3
  • 输出

1
1 2
1 2 3
1 3
2
2 3
3

提示

可以通过递归的方式来生成子集。对于每个从 1 到 n 的数字,都有两种选择:将其加入当前子集,或者不加入。从空集开始,逐步考虑每个数字,递归地生成所有可能的子集。具体步骤如下:

  1. 定义一个递归函数,该函数接受当前处理到的数字、当前已经生成的子集作为参数。
  2. 当处理完所有数字时,将当前子集添加到结果列表中。
  3. 对于当前数字,分别考虑两种情况:
    • 不将当前数字加入子集,继续递归处理下一个数字。
    • 将当前数字加入子集,然后递归处理下一个数字。在递归返回后,需要将该数字从子集中移除(回溯操作),以便尝试其他可能的组合。
  4. 生成所有子集后,对结果列表进行排序以保证按字典序输出。