具有一个特定的整数(例如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中实现?
简短的回答涉及将对IterTools::combinations
的调用合并。不过,会有一个警告-我们将需要返回一个拥有的结构,并且这排除了支持向量的切片。差异几乎可以忽略不计,您可以随时将它们切成薄片:
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()
中包含的(高级)实现。