2023蓝桥杯省赛组合数解法

文章介绍了一个使用Python的内部递归函数来找出数组中选择k个元素的所有可能组合的方法。给定一个数组和一个目标元素个数,函数通过递归遍历数组并在满足条件时更新结果列表。示例展示了如何找出1-6中任意三个数字的组合,并进一步过滤掉包含重复数字的组合。
摘要由CSDN通过智能技术生成

```python
#
#
# # 内部递归函数,参数包括原始数组 nums、需要选择的元素个数 k、当前遍历的起始位置 start、临时结果列表 temp 和最终结果列表 result
# def dfs(nums, k, start, temp, result):
#     # 如果已经选择了 k 个元素,将其添加到结果列表中,并返回
#     if len(temp) == k:
#         result.append(list(temp))
#     else:
#         # 从 start 位置开始遍历所有元素
#         for i in range(start, len(nums)):
#             # 将当前位置的数添加到临时列表中
#             temp.append(nums[i])
#             # 从下一个位置继续选取元素
#             dfs(nums, k, i+1, temp, result)
#             # 恢复临时列表状态
#             temp.pop()
#
#     return result
#
#
# # 示例
# nums = [1, 2, 3, 4, 5, 6]
# k = 3
# result = []
# temp = []
# dfs(nums, k, 0, temp, result)
# print(result)
#
# # 作业
# # 1-6 中 去任意三个数字的组合
#
l = []
k = []
def f(lst,start,end,k=[]):
    if len(k)==3:
        l.append(list(k))
    else:
        for i in range(start,end):
            k.append(lst[i])
            f(lst,start+i,end)
            k.pop()
    return l

lst = [1,2,3,4,5]
s = f(lst,0,len(lst))
ss = []
for k,i in enumerate(s):
    k = 0
    for j in i:
        if i.count(j)>1:
            k = 1
    if k==0:
        ss.append(i)

print(ss)




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值