我需要找到包含所有数字的给定数字之外的所有可能数字组合。假设我有一个数组[0,5,3,9]我需要仅使用给定的数字来获得所有长度为4的数字。请帮忙。
我尝试循环,正在寻找一些数学方法
}
输出与预期不符
答案 0 :(得分:0)
您这样做:
/* for legal usage only */
function comboMaster(base){
this.base = base === undefined ? 10 : base;
this.comboPower = function(digits, base){
var b = base === undefined ? this.base : base;
for(var i=0,n=1,l=digits; i<l; i++,n*=b){
}
return n;
}
this.comboArray = function(power){
var d = power.toString().length-1;
for(var i=0,z='0',l=d-2; i<l; i++,z+='0'){
}
for(var i=0,a=[],l=power; i<l; i++){
for(var n=1,s=i,q=z; n<d; n++){
s = s.toString().replace(new RegExp('^(\\d{'+n+'})$'), q+'$1'); q = q.slice(0, -1);
}
for(var n=0,r=[],b=s.split(''),q=b.length; n<q; n++){
r.push(+b[n]);
}
a.push(r);
}
return a;
}
this.combos = function(array){
for(var i=0,c,p,a=[],l=array.length; i<l; i++){
p = this.combos(array.slice(0, i).concat(array.slice(i+1))); c = array[i];
if(!p.length){
a.push([c]);
}
else{
for(var n=0,q=p.length; n<q; n++){
a.push([c].concat(p[n]));
}
}
}
return a.sort();
}
}
var combo = new comboMaster, c = combo.combos([0, 5, 3, 9]);
var a = combo.comboArray(combo.comboPower(4)), out = document.getElementById('out');
for(var i=0,l=c.length; i<l; i++){
out.appendChild(document.createTextNode('['+c[i]+']'));
out.appendChild(document.createElement('br'));
}
out.appendChild(document.createElement('hr'));
for(var i=0,l=a.length; i<l; i++){
out.appendChild(document.createTextNode('['+a[i]+']'));
out.appendChild(document.createElement('br'));
}
<div id='out'></div>
comboMasterInstance.combo
是使用this完成的。