华为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"
相关推荐
小熳芋4 小时前
验证二叉搜索树- python-递归&上下界约束
数据结构
遇到困难睡大觉哈哈4 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
遇到困难睡大觉哈哈6 小时前
HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记
笔记·华为·harmonyos
氤氲息6 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈6 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生6 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生6 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky7 小时前
鸿蒙暂未归类知识记录
华为·harmonyos
waeng_luo8 小时前
[鸿蒙2025领航者闯关] ArkUI动画实战
鸿蒙·鸿蒙2025领航者闯关·鸿蒙6实战·开发者年度总结