给定参数n 从1到n会有n个整数 1,2,3,...n
这n个数字共有n!种排列 按大小顺序升序列出所有排列情况
并一一标记
当n=3时,所有排列如下
"123","132","213","231","312","321"
给定n和k 返回第n个排列
输入描述
第一行为n
第二行为k
n的范围是 1~9
k的范围是 1~n!
输出描述
输出排列第k位置的数字
示例一:
输入
3
3
输出
213
示例二:
输入
2
2
输出
21
<?php
$n=trim(fgets(STDIN));
$k=trim(fgets(STDIN));
solution($n,$k);
$res=[];
function solution($n, $k)
{
global $res;
$num = [];
for ($i = 0; $i < $n; $i++) {
$num[] = $i + 1;
}
permute($num, []);
$new = [];
foreach ($res as $v) {
$new[] = intval(implode('', $v));
}
sort($new);
echo $new[$k - 1];
}
//PHP实现全排列
function permute($nums, $arr)
{
global $res;
if (count($nums) == count($arr)) {
$res[] = $arr;
return;
}
foreach ($nums as $val) {
if (!in_array($val, $arr)) {
$arr[] = $val;
permute($nums, $arr);
array_pop($arr);
}
}
}