我正在尝试生成所有可能的长度N的列表,总和为S.我已经编写了一些代码来执行此操作,但是在任何大的(特别是,我希望N = 5,S = 100),我遇到了内存溢出错误.
我正在寻找一个更好的问题解决方案,或者一种改进我的代码的方法,以便我可以在N = 5,S = 100上运行它.下面这两个程序协同工作,在嵌套列表中创建所有可能的数字组合,然后将它们重新设置为正确的格式.下面再现了一些样本输出.
我知道我的代码不是最好的.我是一名工程师(我知道,我知道),所以编码并不完全是我的专长.我感谢您提供的任何帮助.
编辑:我只是想澄清一些事情.首先,列表中的零可以,列表可以包含相同数字的倍数,列表中数字的顺序很重要.
def nToSum(N,S):
''' Creates a nested list of all possible lists of length N that sum to S'''
if N <= 1: #base case
return [S]
else:
L = []
for x in range(S+1): #create a sub-list for each possible entry of 0 to S
L += [[x,nToSum(N-1,S-x)]] #create a sub-list for this value recursively
return L
def compress(n=[],L): #designed to take in a list generated by nToSum …Run Code Online (Sandbox Code Playgroud)