题目41

 给定参数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);
        }
    }
}

 

posted @ 2022-07-21 17:48  weigm*  阅读(102)  评论(0)    收藏  举报