题目链接:
https://leetcode-cn.com/problems/permutations/
主要是考察递归
AC代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
int n;
//vector<vector<int> > ans;
//当n=10时,不会输出
//n=10时,运行时间真的很长,
void perm(vector<int> nums,int left,int right){
if(left==right){
// ans.push_back(nums);
for(int j=1;j<=n;j++){
if(j==1)
printf("%d",nums[j]);
else
printf(" %d",nums[j]);
}
printf("\n");
}
else{
//思想:
//让1~n的数都可以作为第一个元素输出,一直到left=right输出第一个序列,
for(int i=left;i<=right;i++){
swap(nums[left],nums[i]);//先交换这两个位置的数
perm(nums,left+1,right);
swap(nums[left],nums[i]);//然后恢复为原来的序列,以便下次再次交换
}
}
}
int main()
{
vector<int> vec(15);
scanf("%d",&n);
for(int i=1;i<=n;i++){
vec[i]=i;
}
perm(vec,1,n);
return 0;
}