一个数组排列组合的各种可能性:
栗子:var array=[‘1’,‘2’,‘3’,‘4’];
实现效果:1,2,3,4,12,13,14,123,124,134,23,24,234,34,1234;
需求:不在乎数字先后顺序,但不可重复;
初始思路语句如下:
缺点:代码过长,数组长度固定。
var array = ['1', '2', '3', '4'];
var newArr = [];
for (var i = 0; i < array.length; i++) {
var a = [];
a.push(array[i]);
newArr.push(a);
for (var j = i + 1; j < array.length; j++) {
var b = [];
b = b.concat(a);
b.push(array[j]);
newArr.push(b);
for (var y = j + 1; y < array.length; y++) {
var c = [];
c = c.concat(b);
c.push(array[y]);
newArr.push(c);
for (var z = y + 1; z < array.length; z++) {
var d = [];
d = d.concat(c);
d.push(array[z]);
newArr.push(d);
}
}
}
}
console.log(newArr);
运行结果:
递归思路语句如下:
缺点:最大执只能行数组长度为22的数组
var array = ['1', '2', '3', '4', '5'];
function run() {
var parentArr = [];
for (var i = 0; i < array.length; i++) {
var newArr = [], tempI = i;
newArr.push(array[i]);
parentArr.push(newArr);
goOn(++tempI, parentArr, newArr);
}
return parentArr;
}
function goOn(start, parentArr, newArr) {
for (var i = start; i < array.length; i++) {
var chileArr = [], tempI = i;
chileArr = chileArr.concat(newArr);
chileArr.push(array[i]);
parentArr.push(chileArr);
goOn(++tempI, parentArr, chileArr);
}
}