(Python)求符合条件元组个数

给定一个整数数组 nums 、一个数字 k、一个整数目标值 target,请问 nums 中是否存在 k 个元素使得其相加结果为 target,请输出所有符合条件且不重复的 k 元组的个数

输入:

第一行是 nums 取值:2 7 11 15

第二行是 k 的取值:2

第三行是 target 取值: 9

输出:

1

说明:

[2,7]满足,输出个数是 1

解题思路:

通过回溯法找出数组 nums 中符合要求的 k 元组,使其相加结果为 target,并统计符合条件且不重复的 k 元组个数。

回溯法python框架:

result= []
def backtrace(选择列表nums, 路径列表trace):
    if 满足约束条件:
        result.append(路径 trace.copy())
        return
    for 选择 in 选择列表nums:
        做选择trace.append()
        backtrace(剩余选择列表, 路径)
        撤销选择trace.pop()

题解:

def combine(nums, target, k):
    result = []
    trace = []

    def backtrace(nums, trace, k):
        if len(trace) == k and sum(trace) == target:
            result.append(trace.copy())
            return

        for i in range(len(nums)):
            if len(trace) >= k:  # 剪枝
                break
            trace.append(nums[i])
            backtrace(nums[i + 1:], trace, k)
            trace.pop()

    backtrace(nums, trace, k)
    result_tmp = [sorted(x) for x in result]
    result = [x for i, x in enumerate(result_tmp) if x not in result_tmp[:i]]  # 去重
    print(len(result))


if __name__ == "__main__":
    nums = list(map(int, input().split()))
    k = int(input())
    target = int(input())
    combine(nums, target, k)

猜你喜欢

转载自blog.csdn.net/qq_43486538/article/details/133690312