全排列的简要总结
全排列(Permutation)是数学中一个经典的问题,指的是从一组元素中,将所有元素按任意顺序排列形成的所有可能序列。
特点
- 输入条件:
- 给定一组互异的元素(通常为数组或字符串)。
- 例如:
[1, 2, 3]的全排列。
- 输出结果:
- 输出所有元素的排列组合。
- 数量公式:
- 对于
n个互异元素,其全排列数量为 n!(阶乘)。 - 例如:
n = 3时,全排列数量为 3! = 6。
- 对于
例如:[1, 2, 3] 的全排列是:
[1, 2, 3] [1, 3, 2] [2, 1, 3] [2, 3, 1] [3, 1, 2] [3, 2, 1]
实现方式
1. 递归法
通过递归交换或回溯实现:
#include <iostream>
#include <vector>
using namespace std;
void backtrack(vector<int>& nums, int start, vector<vector<int>>& result) {
if (start == nums.size()) {
result.push_back(nums);
return;
}
for (int i = start; i < nums.size(); i++) {
swap(nums[start], nums[i]); // 交换当前元素
backtrack(nums, start + 1, result); // 递归处理子问题
(nums[start], nums[i]);
}
}
{
vector<> nums = {, , };
vector<vector<>> result;
(nums, , result);
( & perm : result) {
( num : perm) {
cout << num << ;
}
cout << endl;
}
;
}







