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

相关内容

热门资讯

第1智能!云南山水麻将有挂吗(... 第1智能!云南山水麻将有挂吗(辅助挂)太坑了其实真的有挂(有挂总结)-哔哩哔哩1、让任何用户在无需云...
3系统规律(Epoker外挂)... 3系统规律(Epoker外挂)外挂透明挂辅助神器(透视)大神讲解(有挂技巧)-哔哩哔哩关于Epoke...
第5个漏洞!德扑之星实战(决策... 第5个漏洞!德扑之星实战(决策软件)透视辅助(发现有挂)-哔哩哔哩是一款可以让一直输的玩家,快速成为...
两个代打!微扑克软件的规律(专... 两个代打!微扑克软件的规律(专用辅助器)透视辅助(有挂透视)-哔哩哔哩;原来确实真的有挂(需添加指定...
第9苹果(aapoKer)外挂... 第9苹果(aapoKer)外挂透明挂辅助app(辅助挂)攻略教程(新版有挂)-哔哩哔哩;支持多人共享...
四是真的!雀神广东麻将助赢神器... 四是真的!雀神广东麻将助赢神器(辅助挂)太坑了原来真的有挂(有挂详细)-哔哩哔哩是一款可以让一直输的...
1个靠谱!德扑之星刷数据(有没... 1个靠谱!德扑之星刷数据(有没有规律)软件透明挂(有挂功能)-哔哩哔哩;(需添加指定薇1367043...
8个机器人!wepoke软件透... 8个机器人!wepoke软件透明挂视频(用模拟器)辅助挂(有挂助手)-哔哩哔哩是一款可以让一直输的玩...
2网页版!老友棋牌是否有挂(透... 2网页版!老友棋牌是否有挂(透视)太坑了其实真的有挂(有挂技巧)-哔哩哔哩是一款可以让一直输的玩家,...
第6规律(微扑克发牌)外挂透明... 第6规律(微扑克发牌)外挂透明挂辅助工具(透视)教你攻略(有挂透明挂)-哔哩哔哩科技教程也叫必备教程...