第k个排列

题目描述

给定参数 n,从 1 到 n 会有 n 个整数:1,2,3,...,n, 这 n 个数字共有 n! 种排列。

按大小顺序升序列出所有排列的情况,并一一标记,当 n = 3 时,所有排列如下:

"123"

"132"

"213"

"231"

"312"

"321"

给定 n 和 k,返回第 k 个排列。

输入描述

输入两行,第一行为 n,第二行为 k,

给定 n 的范围是1, 9, 给定 k 的范围是1, n!。

输出描述

输出排在第 k 位置的数字。

用例1

输入

3

3

输出

213

说明

3的排列有123,132,213...,那么第三位置就是213

用例2

输入

2

2

输出

21

说明

2的排列有12,21,那么第二位置的为21。

python 复制代码
n=int(input())
k=int(input())
nums =[i for i in range(1,n+1)]
fact = 1 #n的阶乘
for i in range(1,n+1):
    fact*=i
results=[]
k-=1  #数字是从1开始的,在这里转化为索引
for i in range(n,0,-1):
    fact//=i
    results.append(nums.pop(k//fact))
    k%=fact
print(''.join(map(str,results)))
相关推荐
夊2 小时前
C语言第十一课:指针(五)
算法
小师兄吃牛肉2 小时前
C语言指针进阶全解析
java·c语言·算法
梦帮科技2 小时前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm
做运维的阿瑞3 小时前
多表查询基础:INNER JOIN、LEFT JOIN、RIGHT JOIN
数据库·sql·mysql·算法
大侠归来4 小时前
C语言素数判断:从入门到进阶
java·c语言·算法
v:PLLucky204 小时前
农作物病虫害检测识别系统
深度学习·scrapy·算法·百度·微信公众平台
朝朝辞暮i4 小时前
C++ 第一阶段总结:从零基础到 ROS2 前置语法
开发语言·c++·算法
H.莓飛4 小时前
【数据结构】链表_OJ题
linux·数据结构·算法·链表
All for pursuit.4 小时前
【回溯-4】46.全排列
数据结构·c++·算法·leetcode
小鱼~~4 小时前
Recall@K、Precision@K、MRR、nDCG@K简介
人工智能·算法·机器学习