我遇到了一个看起来很简单但实际上很难的问题。它似乎是组合算法的子集。有没有更快更直接的算法?
/// split the group {v1} to {n} parts
///
/// For example:
/// Group(here represented by an array):
/// [1, 2, 3, 4]
/// split Group to 2 part, got:
/// [[1], [2, 3, 4]]
/// [[1, 2], [3, 4]]
/// [[1, 3], [2, 4]]
/// [[1, 4], [2, 3]]
/// [[1, 2, 3], [4]]
fn split_group(v1: Vec<i32>, n: i32) -> Vec<Vec<Vec<i32>>> {
unimplemented!()
}
fn main() {
let mut v1 = vec![1, 2, 3, 4];
let v2 = split_group(v1, 2);
assert_eq!(
v2,
vec![
vec![vec![1], vec![2, 3, 4]],
vec![vec![1, 2], vec![3, 4]],
vec![vec![1, 3], vec![2, 4]],
vec![vec![1, 4], vec![2, 3]],
vec![vec![1, 2, 3], vec![4]],
]
);
}