华为OD机考题加答案之输出指定位置的数字

【第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

复制代码
function factorial(num: number): number {
  let result = 1;
  for (let i = 2; i <= num; i++) {
    result *= i;
  }
  return result;
}

function findKthPermutation(nums: number[], k: number): string {
  if (nums.length === 1) {
    return nums[0].toString();
  }

  const n = nums.length;
  const fact = factorial(n - 1);
  const index = Math.floor((k - 1) / fact);
  const chosen = nums[index];
  nums.splice(index, 1);

  return chosen.toString() + findKthPermutation(nums, k - index * fact);
}

function getPermutation(n: number, k: number): string {
  const nums: number[] = [];
  for (let i = 1; i <= n; i++) {
    nums.push(i);
  }

  return findKthPermutation(nums, k);
}

// 测试示例
console.log(getPermutation(3, 3)); // 输出: "213"
console.log(getPermutation(4, 9)); // 输出: "2314"
console.log(getPermutation(3, 1)); // 输出: "123"
相关推荐
linx29512 分钟前
第七章 · 标准库容器、算法与 ranges
c语言·开发语言·数据结构·c++·算法
anthonyzhu12 分钟前
MacOS27 x86限制引发的pod的问题处理
华为·harmonyos
贾伟康13 分钟前
【HarmonyOS 7新能力|030】沉浸光感工程封装:把接入逻辑放进可维护的分层结构
harmonyos·arkts·arkui·harmonyos 7·交互动效
万物智能信息科技16 分钟前
GPIO控制状态灯—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
人工智能·华为·开源·harmonyos·鸿蒙
威哥爱编程21 分钟前
HarmonyOS 7 平行视界 EasyGo 实战:配置文件接入应用内分屏,1:2/2:1 随意切
harmonyos·arkts
Logic10128 分钟前
C语言/数据结构位运算题解:异或XOR找出独特数字的索引位置——成对数字在两侧
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
橘子汽水16829 分钟前
Leetcode 763,45 划分字母区间 跳跃游戏II
数据结构·算法·leetcode
威哥爱编程33 分钟前
HarmonyOS 7 空间重建实战:3DGS 端侧重建从建模到商品展示
harmonyos·arkts
kiracrimson41 分钟前
建堆的两种算法:O(N) 和 O(N log N) 差在哪里
数据结构
jiao000011 小时前
【鸿蒙实战】从零撸一个「华为商城」App
华为·harmonyos·arkts