使用c++,用递归生成整数的全排列
时间: 2024-05-04 17:21:08 浏览: 96
以下是使用递归生成整数的全排列的 C++ 代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
void permute(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]);
permute(nums, start + 1, result);
swap(nums[start], nums[i]);
}
}
int main() {
vector<int> nums = {1, 2, 3};
vector<vector<int>> result;
permute(nums, 0, result);
for (vector<int> res : result) {
for (int num : res) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
```
在 `permute` 函数中,我们使用 `start` 参数来表示当前要处理的数字的位置。如果 `start` 等于 `nums` 的大小,说明我们已经完成了一次全排列,将当前的 `nums` 添加到结果列表中即可。
否则,我们从 `start` 开始遍历 `nums`,将 `nums[start]` 与 `nums[i]` 交换位置,然后递归处理 `start + 1` 开始的数字。处理完成之后,需要将 `nums[start]` 和 `nums[i]` 交换回来,以便进行下一次遍历。
在 `main` 函数中,我们创建一个 `nums` 向量来存储要进行全排列的数字,然后调用 `permute` 函数来生成所有的全排列。最后,我们遍历结果列表并输出每个全排列。
阅读全文