Все перестановки до п = х - PullRequest
       10

Все перестановки до п = х

0 голосов
/ 11 октября 2019

Имея определенное целое число (например, n = 3), я хочу иметь массив, в котором каждый элемент является одной из возможных перестановок чисел вплоть до n = 3. Пример:

 n = 3, so numbers: [0,1,2]

 permutations: [(0),(1),(2), (0,1),(1,0),(0,2),...,(0,1,2),(0,2,1),(1,0,2),(1,2,0),...]

(Вероятно, это можно представить как массив массивов в Rust)
Как этого можно достичь в Rust?

1 Ответ

1 голос
/ 11 октября 2019

Короткий и сладкий ответ включает в себя объединение вызовов на IterTools::combinations. Однако будет одно предупреждение - нам нужно будет вернуть собственную структуру, и это исключит срезы в пользу векторов. Разница почти ничтожна, и вы всегда можете превратить их обратно в кусочки:

user itertools::IterTools;
let items = [1, 2, 3, 4];
let combinations = (1..=items.len()).fold(vec![], |mut state, to_take| {
  state.append(&mut items.iter().combinations(to_take).collect::<Vec<_>>());
  state
});
println!("{:?}", combinations)

Сам метод combinations() очень прост в реализации, если вы не хотите обременять себя (улучшенным)реализация содержится в itertools.

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