BetaCodeShareBeta

by Code Solutions Project

Simple solutions for common problems

Description:Dado un número n devuelve todas las formas posibles (sin repeticiones) de obtener ese número con sumas de otros números (positivos)
Python
Josemi
from functools import lru_cache
@lru_cache(10000)
def sumandos(n):
    res = []
    for i in range(1,int((n)/2)+1):
        if n-i == 1:
            aux=[tuple([1])]
        elif i*2 == n:
            aux=[tuple([i])]
        else:
            aux = sumandos(n-i)
        for j in aux:
            tp=[i]
            if i > j[0]:
                continue
            res.append(tuple(tp)+j)
        if i*2 != n:
            res.append(tuple([i,n-i]))
    return res

Input example

n = 4

Output example

res = [[1,1,1,1],[1,1,2],[1,3],[2,2]]
×Oh snap! Something wrong