Какие циклы for для следующей перестановки? - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь получить эти перестановки с помощью цикла for.

  • 2 элемента {a, b} результат:

    a, b, ab

  • 3 элемента {a, b, c} результат:

    a, b, c, ab, ac, bc, abc

  • 4 элемента {a, b, c, d} результат:

    a, b, c, d, ab, ac, ad, bc, bd, cd, abc, abd, acd, bcd, abcd

  • 5 элементов {a, b, c, d, e} результат:

    a, b, c, d, e, ab, ac, ad, ae, bc, bd, be, cd, ce, de, abc, abd, abe, acd, ace, ade, bcd, bce, bde, cde, abcd, abce, abde, acde, bcde, abcde

и т. Д.

Я сделал это в jsfiddle , укладывая for петли один за другим, чтобы поймать систематическую структуру:

var a, b, c;

a = ['a', 'b', 'c', 'd', 'e', 'f'];
b = [];

for(i=0; i < a.length; i++){
  b[b.length] = a[i];
}
for(i=1; i < a.length; i++){
  b[b.length] = b[0]+b[i];
}
for(i=2; i < a.length; i++){
  b[b.length] = b[1]+b[i];
}
for(i=3; i < a.length; i++){
  b[b.length] = b[2]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[3]+b[i];
}
for(i=2; i < a.length; i++){
  b[b.length] = b[5]+b[i];
}
for(i=3; i < a.length; i++){
  b[b.length] = b[6]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[7]+b[i];
}
for(i=3; i < a.length; i++){
  b[b.length] = b[9]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[10]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[12]+b[i];
}
for(i=3; i < a.length; i++){
  b[b.length] = b[15]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[16]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[18]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[21]+b[i];
}
for(i=4; i < a.length; i++){
  b[b.length] = b[25]+b[i];
}

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вот еще один, который может работать.

var getCombinations = function(arr, originalLength) {
	if (originalLength == 0) return arr;
	var diff = arr.length - originalLength;
	var l = arr.length;
	var result = arr;
	for (i=0; i < originalLength; i++){
	  for (j=diff+i; j < l; j++) {
		if (!arr[j].includes(arr[i]))
			result.push(arr[i] + arr[j]);
	  }
	}
	return getCombinations(result, originalLength - 1);
}

var a = ['a', 'b', 'c', 'd'];
console.log(getCombinations(a, a.length));
0 голосов
/ 10 мая 2018

Попробуйте это решение.

var x = ['a','b','c','d'],
	possiblePermutation = [];

x.forEach(function(elmt){
	possiblePermutation.push(elmt)
	var rest = x.slice( x.indexOf(elmt) + 1);
	myPermutationGeneration(elmt,rest)
})
function myPermutationGeneration(current,rest){	
	rest.forEach( function( restEle ){
		possiblePermutation.push( current + restEle )
		var rest2 = x.slice( x.indexOf(restEle) + 1);
		myPermutationGeneration( current + restEle, rest2)
	})
}
console.log( possiblePermutation )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...