Задать вопрос
@niftyweaver

Как работают пермутации (arrays)?

Я не понимаю как работает код в finalPermutations.
Я закомментировал часть кода, которую я не понимаю
function permutations(string) {
  if (string.length <= 1) {
    return [string];
  }
  
  let finalPermutations = permutations(string.substring(1)) // ? 
    .reduce((acc, p) => { 
      let charList = p.split(''); 
      for (let i = 0; i <= charList.length; i++) { // ? 
        let newPermutation = charList.slice(0, i) // ? 
                              .concat([string[0]]) // ? 
                              .concat(charList.slice(i)) // ? 
                              .join(''); 
        if (!acc.includes(newPermutation)) { // ? 
          acc.push(newPermutation); // ? 
        } 
      }
      return acc;      
  },[]);
  return finalPermutations;
}
  • Вопрос задан
  • 124 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Это рекурсивный метод генерации всех перестановок. Сначала рекурсивно генерируется перестановки для всех символов, кроме первого. Потом к каждой перестановке в каждую возможную позицию вставляется первый символ.

Так, для генерации всех перестановок "abc", сначала рекурсивно будет получен массив {"bc", "cb"}, потом для каждого его элемента в ответ будет добавлена перестановка с "a" вставленным в позицию 0, 1 и 2: "abc", "bac", "bca" для первого элемента, и "acb", "cab" и "cba" для второго.

Или вам не понятно, что делают reduce, slice, substring, concat, join?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы