Перестановки x вариантов в y местах - PullRequest
0 голосов
/ 05 апреля 2020

Это похоже на другие вопросы о перестановках, но различия становятся проблемой.

given x options (обычно 3-7 или [a,b,c] до [a,b,c,d,e,f,g])

получить все permutations of y length (также обычно 3-7)

x = [a,b,c]  y = 7 

[a,a,a,a,a,a,a]
[a,a,a,a,a,a,b]
[a,a,a,a,a,b,a]
[a,a,a,a,b,a,c]
[a,c,a,b,a,a,a]
     etc.

или

x=7 [a,b,c,d,e,f,g]    y=3

[a,a,a]
[a,d,g]
[a,g,d]
[g,d,a]
  etc.   

Я хотел бы сказать, что я где-то попал, но я даже не знаю, как чтобы начать это, и каждое другое решение, включающее перестановки, кажется, сильно зависит от длины строки.

1 Ответ

2 голосов
/ 05 апреля 2020

Это на самом деле не перестановки, это строки над алфавитом. Это может быть реализовано рекурсивно так:

let alphabet = ['a', 'b', 'c', 'd'];
let strings = [];

function generateStrings(alphabet, strings, length, prefix = []) 
{
  for (let letter of alphabet) {
    if (length === 1) {
      strings.push([letter].concat(prefix));
    } else {
      generateStrings(alphabet, strings, length - 1, [letter].concat(prefix));
    }
  }
}

generateStrings(alphabet, strings, 3);

console.log(strings);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...