Created
June 28, 2020 02:41
-
-
Save dev-chee/3a4fa2ddc5e872856ebf7fef16e0b88d to your computer and use it in GitHub Desktop.
排列算法
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 排列算法 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