第K个排列

时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
【第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。


```javascript
function swap( arr, a, b){

    let temp = arr[a];

    arr[a] = arr[b];

    arr[b] = temp;

}

 

function fullArray(array, cursor, end) {

    if (cursor == end) {    

        let s = "";

        for (let a of array) {

            s+=a;

        }

        list.push(Number(s));

    } else {

        for (let i = cursor; i <= end; i++) {

            swap(array, cursor, i); 

            fullArray(array, cursor + 1, end);

            swap(array, cursor, i); 

        }

    }

}

个人还整理了其他真题,私聊了解更多


你可能感兴趣的:(算法)