我在 Rust 中有一个函数,它从给定需要组合的位数(nCk)的集合中返回可能的组合数量的向量向量。
如果集合是 [1,2,3]
并且位数(k)是 2,则 output 是:
[[1, 2], [1, 3], [2, 3]]
但是,如果我选择 k 是一个很大的数字,它会花费太多时间并在完成处理后立即打印所有 output 。
有没有可能它一直让我在旅途中运行 output ?
在 Java 中,我有同样的东西,它让我运行 output。
这是我的功能:
fn comb<T>(slice: &[T], k: usize) -> Vec<Vec<T>>
where
T: Copy,
{
if k == 1 {
return slice.iter().map(|x| vec![*x]).collect::<Vec<Vec<T>>>();
}
if k == slice.len() {
return vec![slice.to_vec()];
}
let mut result = comb(&slice[1..], k - 1)
.into_iter()
.map(|x| [&slice[..1], x.as_slice()].concat())
.collect::<Vec<Vec<T>>>();
result.extend(comb(&slice[1..], k));
return result;
}
回答1
我解决了这个问题。
没有运行 output 因为函数本身没有 print 语句,尽管它在 main 函数中。在函数本身中添加打印语句解决了问题:]
let mut result = comb(&slice[1..], k - 1)
.into_iter()
.map(|x| {
let output = [&slice[..1], x.as_slice()].concat();
println!("{:?}", output);
output
})
.collect::<Vec<Vec<T>>>();
此外,您需要稍微更改签名:
T: Copy + Debug
T
现在也需要实现调试。