不限制排列数目,求特定和的排列情况。
创始人
2025-01-10 09:30:12
0

使用递归算法,依次枚举各个元素的大小,直到所有元素的和等于指定和为止。具体实现如下:

def find_permutations(target_sum, available_numbers):
    """
    递归查找所有和为target_sum的排列
    :param target_sum: int 目标和
    :param available_numbers: list 可选元素列表
    :return: list 排列结果
    """
    result = [] # 用于存储结果
    
    # 遍历可选元素,依次考虑它们作为第一个元素的情况
    for i, num in enumerate(available_numbers):
        # 如果当前元素就是目标和,将其加入结果列表
        if num == target_sum:
            result.append([num])
        # 如果当前元素小于目标和,需要在剩余元素中继续查找
        elif num < target_sum:
            # 从剩余元素中排除当前元素,得到新的可选元素列表
            new_available_numbers = available_numbers[:i] + available_numbers[i+1:]
            # 查找剩余元素中和为target_sum - num的排列
            sub_results = find_permutations(target_sum - num, new_available_numbers)
            # 把num加入子结果中,得到全排列
            [sub_result.appendleft(num) for sub_result in sub_results]
            # 把这些全排列加入result中
            result += sub_results
    
    return result

使用示例:

print(find_permutations(5, [1, 2, 3]))
# 输出:[[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 2, 1], [1, 2, 1, 1], [1, 2, 2], [2, 1, 1, 1], [2, 1, 2], [2, 2, 1], [3, 2], [2, 3]]

上述代码会查找和为5的所有排列,在[1, 2, 3]这个列表中选取元素。输出结果是一个二维列表,包含所有符合条件的排列。

相关内容

热门资讯

实操分享!欢乐联盟卡五星辅助,... 实操分享!欢乐联盟卡五星辅助,九酷互娱辅助,系统教程(详细教程)-哔哩哔哩>>您好:软件加薇1367...
必看攻略!欢乐茶馆修改器,九九... 欢乐茶馆修改器是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微信...
攻略讲解!多乐辅助下载,aap... 大家好,今天小编来为大家解答多乐辅助下载这个问题咨询软件客服可以免费测试直接加微信(13670430...
一起来讨论!福建天庭啊开心辅助... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
实测发现!小程序游戏修改器辅助... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
终于知道!创思维激k软件助手,... 终于知道!创思维激k软件助手,衢州都莱辅助软件,解说技巧(有挂细节)-哔哩哔哩【无需打开直接搜索加薇...
交流学习经验!广东雀神麻雀辅助... 交流学习经验!广东雀神麻雀辅助神器,爱来大菠萝怎么玩,新2026教程(有挂透明挂)-哔哩哔哩【无需打...
重大通报!wepoker辅助器... 重大通报!wepoker辅助器,八闽福建辅助,可靠技巧(有挂工具)-哔哩哔哩;无需打开直接搜索打开薇...
盘点一款!边锋小程序辅助免费,... 您好:这款边锋小程序辅助免费游戏是可以开挂的,确实是有挂的,很多玩家在这款边锋小程序辅助免费游戏中打...
实测教程!微乐四川亲友圈辅助器... 实测教程!微乐四川亲友圈辅助器,新天道辅助软件,揭秘攻略(有挂功能)-哔哩哔哩;打开点击测试直接进入...