一、输出n个数的任意组合
问题描述:给定一个正整数n,输出1,2,3……n所含的所有子集
输入示例
3
输出示例
3
2
2 3
1
1 3
1 2
1 2 3
问题分析
递归思想实现,对每个数i都将其表示成(0,i) 的形式,对每个数都可以选择选中它,或者不选他。若选中则将其加在输出列表中。
check函数来判定是否遍历完所有数,若全部遍历完了,判断输出列表是否为空,若不为空则输出,并进行回溯(为空则直接回溯)
代码示例
def dfs():
global m
if not check():
return
for i in range(2):
if i==1:
lt.append(ls[m][1])
m+=1
dfs()
del lt[-1]
m-=1
else:
m+=1
dfs()
m-=1
def check():
if m==n:
if len(lt)!=0:
s=" ".join(lt)
print(s)
return False
return True
if __name__=="__main__":
n=int(input())
ls=[(0,str(i)) for i in range(1,n+1)]
m=0
lt=[]
dfs()