Этот вопрос закрыт для ответов, так как повторяет вопрос Как из нескольких массивов с цифрами получить все возможные комбинации?
@MaxYenot

Как сделать комбинацию элементов разных массивов, избегая вложенных циклов for?

Вопрос такой. Нужно скомбинировать массивы
Вариант 1
группа1 = 1,2,3
группа2 = 1,2,3
На выходе должно получиться 11, 12, 13, 21, 22, 23, 31,32,33

Вариант2
группа1 = 1,2,3
группа2 = 1,2,3
группа3 = 1,2,3
На выходе должно получиться
111, "112", "113", "121", "122", "123", "131", "132", "133", "211", "212", "213", "221", "222", "223", "231", "232", "233", "311", "312", "313", "321", "322", "323", "331", "332", "333"

У меня получилось несколько вложенных циклов for.
var group1=["1","2","3"];
var group2=["1","2","3"];
var group3=["1","2","3"];
var firstDigit = "";
var secondDigit = "";
var thirdDigit = "";
var pusher = "";
var variants = [];
for(a=0; a<group1.length;a++){
	firstDigit = group1[a];
	for(b=0;b<group2.length;b++){
		secondDigit = group2[b];
		for(c=0; c<group3.length; c++){
			thirdDigit = group3[c];
			pusher = firstDigit + secondDigit + thirdDigit;
			variants.push(pusher);
		}
	}
}


Но как написать универсальный код, если изначально будет неизвестно, сколько групп будет изначально?
Групп с числами может быть как 2, так и 5. И скомбинировать надо по предыдущей схеме.
  • Вопрос задан
  • 178 просмотров
Ответы на вопрос 1
Adamos
@Adamos
0. Имеете В - массив массивов вариантов.
1. Создаете П - массив текущих позиций в каждом массиве (инициализируя их все нулем).
2. Сохраняете (или выводите) текущую комбинацию - for(i) В[ i ][ П[ i ] ]
3. Проходите циклом по П от 0 до конца, находите позицию, которую можно увеличить, обнуляете все, которые до нее.
4. Если это удалось сделать - возвращаетесь на шаг 2.
Так получается не более одного вложенного цикла.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы