其他分享
首页 > 其他分享> > 题目41

题目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);
        }
    }
}

 

标签:输出,排列,题目,213,示例,41,给定,输入
来源: https://www.cnblogs.com/weiguomiao/p/16502872.html