问题描述:输入一个整型数字N,求1~n组成数组的全排列
输入用例:3
输出用例:
1 2 3
1 2 3
2 1 3
2 3 1
3 1 2
3 2 1
解题思想:将当前元素与后面元素交换,交换过程中并进行递归,以下为实现代码:
#include<iostream>
#include<vector>
using namespace std;
void fullArr(vector<int> arr, int start, int end)//传入数组非引用
{
if (start == end) {//打印排列的条件,也就是递归结束条件
for (int i = 0; i < arr.size(); i++)
cout << arr[i] << " ";
cout << endl;
}
set<int> mSet;
for (int i = start; i < end; i++) {
if(mSet.find(s[i]) != mSet.end()) continue;
mSet.insert(s[i]);
//交换
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
//对后面的数组进行递归
fullArr(arr, start + 1, end);
}
}
int main()
{
int n;
cin >> n;//输入数字n
vector<int> vec;
for (int i = 1; i <= n; i++) {
vec.push_back(i);//将1~n存入容器
}
fullArr(vec, 0, vec.size());//传入参数,注意最后一个参数使数组大小
system("pause");
return 0;
}