If the order of the output elements is not critical and is output as follows: [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]valid, you can do something like this:
:
: [[]]
, (1) → [[1]] : [[], [1]]
(2): [[], [1], [2], [1,2]]
(3): [[], [1], [2], [1,2], [3], [1,3], [2,3], [1,2,3]]
:
fn powerset(s: &[i32]) -> Vec<Vec<i32>> {
let mut subsets: Vec<Vec<i32>> = vec![];
let empty: Vec<i32> = vec![];
subsets.push(empty);
let mut updated: Vec<Vec<i32>> = vec![];
for ele in s {
for mut sub in subsets.clone() {
sub.push(*ele);
updated.push(sub);
}
subsets.append(&mut updated);
}
subsets
}
fn main() {
let my_vec: Vec<i32> = vec![1,2,3];
let subs = powerset(&my_vec);
println!("{:?}", subs);
}