gpt4 book ai didi

返回所有排列的函数

转载 作者:行者123 更新时间:2023-11-29 08:22:30 25 4
gpt4 key购买 nike

我想创建一个函数来返回一个序列的所有排列。我从 Rosetta Code 中拿了一个例子,并尝试用 Rust 编写它,但它不起作用。当我尝试修复它时,我要么导致溢出,要么再次破坏它。此代码存在算术溢出错误:

fn permutations_(sequence: Vec<i32>) -> Vec<Vec<i32>> {
if sequence.len() == 0 {
let x: Vec<Vec<i32>> = vec![vec![]];
return x
}

let mut result: Vec<Vec<i32>> = Vec::new();

for (i, item) in permutations_(to_vec(&sequence[0..sequence.len() - 1])).iter().enumerate() {

let mut n = reverse(&(0..item.len() + 1).collect::<Vec<usize>>());

if i % 2 != 0 {
n = (0..item.len() + 1).collect::<Vec<usize>>();
}

for k in n {
let mut items = Vec::new();

for x in &item[0..k] {
items.push(*x);
}

items.push(item[item.len() - 1]);

for x in &item[k..item.len()] {
items.push(*x);
}

result.push(items);
}
}

result
}

如果有更好的方法来做到这一点,我想知道,否则我需要关于如何解决这个问题的想法。

最佳答案

看看 permutohedron做你想做的箱子。看看它的benchmarkstests看看如何使用它。

基本上,您将数据的 &mut 提供给 Heap 的构造,然后您可以对其调用 next_permutation() 以获取对置换数据的可变引用的 Option。这是一个 Option,因此 None 可以发出没有剩余排列的信号。请注意,Heap 还实现了 Iterator,因此您也可以使用 进行堆 { ... } 中的置换。

关于返回所有排列的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34409175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com