Skip to content

Instantly share code, notes, and snippets.

@dev-chee
Created June 28, 2020 02:41
Show Gist options
  • Save dev-chee/3a4fa2ddc5e872856ebf7fef16e0b88d to your computer and use it in GitHub Desktop.
Save dev-chee/3a4fa2ddc5e872856ebf7fef16e0b88d to your computer and use it in GitHub Desktop.
排列算法
// 排列算法 P_{cnt}^{nums.len()}
fn permutation(nums: Vec<i32>, cnt: usize) -> Vec<Vec<i32>> {
fn helper(result: &mut Vec<Vec<i32>>, nums: &mut Vec<i32>, cnt: usize, idx: usize) {
if idx == cnt {
result.push(Vec::from(&nums[..idx]));
return;
}
// 第idx个元素可选择的方法
for i in idx..nums.len() {
nums.swap(idx, i);
helper(result, nums, cnt, idx + 1);
nums.swap(idx, i);
}
}
if cnt == 0 {
return vec![];
}
let mut nums = nums;
let mut cnt = cnt;
if cnt > nums.len() {
cnt = nums.len();
}
let mut result = Vec::new();
helper(&mut result, &mut nums, cnt, 0);
result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment