不限制排列数目,求特定和的排列情况。
创始人
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]这个列表中选取元素。输出结果是一个二维列表,包含所有符合条件的排列。

相关内容

热门资讯

透视有挂!德普之星辅助器怎么用... 透视有挂!德普之星辅助器怎么用,wepoker有辅助器吗(透视)本然真的是有挂(可靠教程);德普之星...
透视了解!pokemmo脚本辅... 透视了解!pokemmo脚本辅助下载,fishpoker透视底牌,切实是有挂(科技教程);1、构建自...
透视透视!wepokerplu... 透视透视!wepokerplus透视脚本免费,德普之星的辅助工具介绍(透视)一直是有挂(存在挂教程)...
透视安装!智星菠萝透视,佛手在... 透视安装!智星菠萝透视,佛手在线大菠萝智能辅助器,一贯是有挂(wpk教程)运佛手在线大菠萝智能辅助器...
透视app!werplan外挂... 透视app!werplan外挂,wepoker安装教程,果然有挂(微扑克教程);1、该软件可以轻松地...
透视挂透视!拱趴大菠萝辅助神器... 透视挂透视!拱趴大菠萝辅助神器,wepoker辅助工具(透视)其实有挂(规律教程)1、很好的工具软件...
透视好友!哈糖大菠萝怎么开挂,... 透视好友!哈糖大菠萝怎么开挂,佛手在线是不是有挂,竟然有挂(wpk教程);1、完成佛手在线是不是有挂...
透视app!德普之星透视辅助软... 透视app!德普之星透视辅助软件激活码,cloudpoker作弊(透视)本然有挂(力荐教程);1)德...
透视有挂!pokemmo辅助工... 透视有挂!pokemmo辅助工具,佛手在线大菠萝为什么都输,确实真的有挂(2025版教程);佛手在线...
透视有挂!wepoker辅助器... 透视有挂!wepoker辅助器,约局吧作弊脚本(透视)原来存在有挂(科技教程);1、约局吧作弊脚本a...