@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;
}
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Это рекурсивный метод генерации всех перестановок. Сначала рекурсивно генерируется перестановки для всех символов, кроме первого. Потом к каждой перестановке в каждую возможную позицию вставляется первый символ.

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

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

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

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