如果有一个特定的整数(例如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中的数组表示)
这怎么能在生锈的情况下实现呢?

最佳答案

简短而贴心的回答包括组合对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中包含的(高级)实现给自己带来负担。

10-02 16:48