@zeni1agent

Код для подбора всех комбинаций?

Я пытаюсь найти(сделать) код для подбора всех комбинаций в массиве
Я нашел вот этот пример

var email = ['1', '2', '3'];

	// массив для результатов перестановок
	var results = [];

	// рекурсивная функция
	// на вход получает текущий массив и массив с памятью предыдущих вычислений
	function permute(arr, memo) {
	  // переменная для хранения фрагмента массива
	  var cur;

	  // делаем переменную для хранения промежуточных результатов
	  // в программировании это называется «мемоизация»
	  var memo = memo || [];

	  // какой размер входного массива — такой длины и делаем цикл, чтобы перебрать все элементы
	  for (var i = 0; i < arr.length; i++) {

		// получаем новый массив cur, удаляя из входного массива один элемент, начиная с текущей позиции
		// при этом из входного массива этот элемент тоже удалится
		cur = arr.splice(i, 1);

		// если от входного массива ничего не осталось
		if (arr.length === 0) {
		  // то приклеиваем текущее значение нарезки к варианту, который лежит в памяти, 
		  // и добавляем получившийся результат в итоговый массив
		  results.push(memo.concat(cur));
		}

		// вызываем новый виток рекурсии
		// в качестве аргументов передаём копию входящего массива и добавляем к кешу памяти то, что получилось после удаления одного символа из входящего массива
		permute(arr.slice(), memo.concat(cur));

		// возвращаем в исходный массив первый элемент из нового массива, но уже на другую позицию
		arr.splice(i, 0, cur[0]);
	  }

	  // возвращаем обратно массив с результатами перестановок
	  return results;
	}

	console.log(permute(email));

Но в этом коде невозможно такие результаты как 112, 111, 212, и так далее
Можно ли сделать возможно создание подобных комбинаций? И ограничить количество выводимых символов до 2 или 5 вне зависимости от размера массива.
  • Вопрос задан
  • 192 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Тривиально. Перебор всех комбинаций длиной M из N символов это перебор всех чисел от 0 до M^N-1, записанных в N-ричной системе. Достаточно написать функцию, которая к числу в N-ричной системе прибавляет единицу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы