n个数的任意组合——蓝桥杯备赛

一、输出n个数的任意组合

问题描述:给定一个正整数n,输出1,2,3……n所含的所有子集

输入示例

输出示例 

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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值