JavaScript 计算排列组合的函数
posted on 2009-11-04 11:02:21+08:00 by david
var test = new Array(); test[0] = new Array('a1', 'a2'); test[1] = new Array('b1', 'b2', 'b3'); test[2] = new Array('c1', 'c2'); function combin(CombinList){ var Result = new Array(); var CombineCount = 1; for(i in CombinList){ CombineCount *= CombinList[i].length; } var RepeatTime = CombineCount; for(i in CombinList){ var ClassNo = i; var StudentList = CombinList[i]; RepeatTime = RepeatTime/StudentList.length; var StartPosition = 1; for(j in StudentList){ var TempStartPosition = StartPosition; var SpaceCount = CombineCount/StudentList.length/RepeatTime; for(var J = 1; J <= SpaceCount; J ++){ for(var I = 0; I < RepeatTime; I ++){ if(typeof(Result[TempStartPosition + I]) == 'undefined'){ Result[TempStartPosition + I] = new Array(); } Result[TempStartPosition + I][ClassNo] = StudentList[j]; } TempStartPosition += RepeatTime*StudentList.length; } StartPosition += RepeatTime; } } return Result; } document.write('<pre>'); var r = combin(test); for(i in r){ document.write(r[i].join('-')+' '); document.write('\n'); } document.write('</pre>'); /* 得出的结果是: a1-b1-c1 a1-b1-c2 a1-b2-c1 a1-b2-c2 a1-b3-c1 a1-b3-c2 a2-b1-c1 a2-b1-c2 a2-b2-c1 a2-b2-c2 a2-b3-c1 a2-b3-c2 */

