题目描述:
0、1、2 三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数 n
求 0-9 十个数全排列中的第 n 个(第 1 个为 0123456789)
输入格式
一行,包含一个整数 n
输出格式
一行,包含一组 10 个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
0<n<=10!
思路解析:
本题类似于以前在 leetcode 上写的 46 题
LeetCode 46 全排列
代码:
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <iomanip>
#include <sstream>
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void backtrack(vector<int> &nums,vector<vector<int>> &res,int i){
if(i==nums.size())
res.push_back(nums);
for(int j=i;j<nums.size();j++){
swap(nums[i],nums[j]);
backtrack(nums,res,i+1);
swap(nums[i],nums[j]);
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
backtrack(nums,res,0);
return res;
}
int main()
{
int a;
cin>>a;
vector<int> num;
vector<vector<int>> b;
for(int i=0;i<=9;i++)
num.push_back(i);
b=permute(num);
for(int i=0;i<b[a-1].size();i++)
cout<<b[a-1][i]<<" ";
cout<<endl;
}
执行结果: