力扣(LeetCode)- 60. 排列序列

题目:

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,返回第 k 个排列。

示例 1:

复制代码
输入:n = 3, k = 3
输出:"213"

解答:javascript

javascript 复制代码
let result = ''
let count = 0
var getPermutation = function(n, k) {
    // 这里需要重置下值,不然多个用例运行会出错
    result = ''
    count = 0
    
    const line = []
    const arr = new Array(n).fill(null).map((v, i) => i + 1)
    dp(arr, line, k)
    return result
};

const dp = (arr, line, k) => {
    if (result) {
        return
    }
    if (arr.length === 0) {
        count++
        if (count === k) {
            result = line.join("")
        }
        return
    }
    for (let i = 0;i < arr.length;i++) {
        let len = arr.length - 1;
        // 用阶乘计算有几种情况,如果这些情况总数未达到 k,
        // 那么情况数相加, 不走后面排序节约内存
        if (len > 1) {
            let cnt = 1
            while(len > 1) {
                cnt *= len
                len--
            }
            
            if (cnt + count < k) {
                count += cnt
                continue
            }
        }
        line.push(arr[i])
        const newArr = arr.filter((v, j) => i !== j)
        dp(newArr, line, k)
        // 回溯
        line.pop()
    }
}
相关推荐
逻辑驱动的ken1 天前
Java高频面试场景题19
java·开发语言·面试·职场和发展·求职招聘
刘大猫.1 天前
宝马发布全新AI智能座舱助手 能理解用户复杂出行需求
人工智能·算法·机器学习·ai·大模型·算力·ai智能座舱助手
如何原谅奋力过但无声1 天前
【灵神高频面试题合集01-03】相向双指针、滑动窗口
数据结构·python·算法·leetcode
leoufung1 天前
LeetCode 42:接雨水 —— 从“矩形法”到双指针的完整思考过程
java·算法·leetcode
_日拱一卒1 天前
LeetCode:543二叉树的直径
算法·leetcode·职场和发展
汉克老师1 天前
GESP2025年3月认证C++五级( 第一部分选择题(9-15))
c++·算法·高精度计算·二分算法·gesp5级·gesp五级
穿条秋裤到处跑1 天前
每日一道leetcode(2026.04.28):获取单值网格的最小操作数
算法·leetcode·职场和发展
leoufung1 天前
LeetCode 68. Text Justification 题解:贪心与实现细节
算法·leetcode·职场和发展
WL_Aurora1 天前
【每日一题】前缀和
python·算法
汉克老师1 天前
GESP2025年3月认证C++五级( 第二部分判断题(1-10))
c++·算法·分治算法·线性筛法·gesp5级·gesp五级