Javascript 一种算法,用于获取具有特定和的范围内n个数的所有可能排列

Javascript 一种算法,用于获取具有特定和的范围内n个数的所有可能排列,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我想做的事情可以很容易地用一个例子来说明。假设如下: var minNum = 1; var maxNum = 30; var sum = 75; var amount = 6; 我想得到所有的amount数字的排列,它们加起来等于sum,并且>=minNum&&这里有一个JavaScript解决方案(如果您的环境递归深度限制了所需结果的数量,则可以将递归转换为显式数组堆栈,像函数调用一样推送参数并弹出以处理它们): 函数划分(n,min,max,parts){ if(n

我想做的事情可以很容易地用一个例子来说明。假设如下:

var minNum = 1;
var maxNum = 30;
var sum = 75;
var amount = 6;

我想得到所有的amount数字的排列,它们加起来等于sum,并且>=minNum&&这里有一个JavaScript解决方案(如果您的环境递归深度限制了所需结果的数量,则可以将递归转换为显式数组堆栈,像函数调用一样推送参数并弹出以处理它们):

函数划分(n,min,max,parts){
if(n<0){
返回;
}else如果(n==0){
document.getElementById('output').innerHTML++=(JSON.stringify(parts))++'
; }否则{ 对于(变量i=max;i>=min;i--){ var_parts=parts.slice(); _零件。推(i); 分区(n-i、最小值、最大值、_部分) } } } 分区(6,2,4,[])

在您的示例中,可能性的数量已经非常多,超过了数十万(我没有做数学计算,但这是一个保守的估计)。时间和空间的复杂性至少是很有挑战性的。你打算用它做什么?NB:编写这个程序没有乐趣,至少对我来说不是。既然你只是在问一个算法,我想这样的问题最好还是直接问。@phaze0:算法问题不是离题。@RobertHarvey哦!很高兴听你这么说知道。这是在限制范围内将整数划分为M个加数的问题,考虑到术语顺序。可能的算法之一-递归生成