Find all possible subsets that sum up to a given number

前端 未结 4 644
既然无缘
既然无缘 2021-01-21 20:32

I\'m learning Python and I have a problem with this seems to be simple task.

I want to find all possible combination of numbers that sum up to a given number.
for

4条回答
  •  北海茫月
    2021-01-21 20:37

    Here is an alternate approach which works by taking a list of all 1s and recursively collapsing it by adding subsequent elements, this should be more efficient than generating all possible subsets:

    def allSum(number):
        def _collapse(lst):
            yield lst
            while len(lst) > 1:
                lst = lst[:-2] + [lst[-2] + lst[-1]]
                for prefix in _collapse(lst[:-1]):
                    if not prefix or prefix[-1] <= lst[-1]:
                        yield prefix + [lst[-1]]
        return list(_collapse([1] * number))
    
    >>> allSum(4)
    [[1, 1, 1, 1], [1, 1, 2], [2, 2], [1, 3], [4]]
    >>> allSum(5)
    [[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 2, 2], [1, 1, 3], [2, 3], [1, 4], [5]]
    

    You can strip off the last value if you don't want the trivial case. If you will just be looping over the results remove the list call and just return the generator.

提交回复
热议问题