蓝桥杯 全排列

题目描述:
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;
}

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值