fn swap(arr: &mut [char], i: usize, j: usize) {
arr.swap(i, j);
}
fn generate_permutation(arr: &mut [char], l: usize, r: usize) {
if l == r {
println!("{}", arr.iter().collect::<String>());
} else {
for i in l..=r {
swap(arr, l, i);
generate_permutation(arr, l + 1, r);
swap(arr, l, i); // backtrack
}
}
}
fn main() {
let mut chars: Vec<char> = "ABC".chars().collect();
let len = chars.len();
generate_permutation(&mut chars, 0, len - 1);
}
/*
run:
ABC
ACB
BAC
BCA
CBA
CAB
*/