力扣(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()
    }
}
相关推荐
财情双生教练易和中18 分钟前
“找矿大会战”产业链,量化统计研究报告
职场和发展·职业发展·创业创新·程序员创富
不会就选b39 分钟前
算法日常・每日刷题--<贪心>26
数据结构·算法
yuanxi2001 小时前
001267拟扩产光模块:大客户销售如何用价值力读一条扩产公告
人工智能·职场和发展·创业创新·学习方法
Interview Aid1122 小时前
Google SWE Intern Interview Process:OA、Coding 与面试流程详解
面试·职场和发展
hetao17338372 小时前
2026-09-29 hetao1733837 的刷题记录
c++·算法
欣欣之王来了3 小时前
AI合规专项:AI算法透明度的合规要求
人工智能·算法
wzdark3 小时前
分块思想在算法优化中的实践与应用4
算法
Because_of_Her13 小时前
dfs-洪水填充技巧
笔记·算法·深度优先·洪水填充
小静AI工程实验室3 小时前
RSA 算法详解:从模幂原理到 OAEP 加密、PSS 签名与 Python 实验
python·算法
xzal124 小时前
GESP Python笔记
笔记·python·算法