码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言力扣第60题之排列序列。广度优先搜索、简单除法定位


    60. 排列序列

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

    按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

    1. "123"
    2. "132"
    3. "213"
    4. "231"
    5. "312"
    6. "321"

    给定 n 和 k,返回第 k 个排列。

    示例 1:

    输入:n = 3, k = 3
    输出:"213"
    

    示例 2:

    输入:n = 4, k = 9
    输出:"2314"
    

    示例 3:

    输入:n = 3, k = 1
    输出:"123"
    

    提示:

    • 1 <= n <= 9
    • 1 <= k <= n!

    例如: n=6,k=373
    初始化数组 nums=[1,2,3,4,5,6];
    首先应该明白,以 1 开头的全排列有 5! 个,以 2 开头的全排列有 5! 个 …… 共 5!∗6=6! 个;

    1.     故 k = 373 时,全排列的第一个数字应该是 nums[k/5!]=4nums[ k / 5! ];
    2.     数组删除 4, 此时 nums=[1,2,3,5,6];k=k%5!=12 ;
    3.     接下来就是在 nums 中找第 12 个全排列,重复 1,2 步即可 。

        注意数组下标是从 0 开始,k 首先要减去 1

    1. int factorial(int n) {
    2. int num = 1;
    3. while (n > 0)
    4. num *= n--;
    5. return num;
    6. }
    7. void deleteItem(int *nums, int numsSize, int in) {
    8. while (in < numsSize - 1)
    9. nums[in++] = nums[in + 1];
    10. }
    11. char *getPermutation(int n, int k) {
    12. int i, j = 0, nums[n], factor;
    13. char *res = (char *)calloc(10, sizeof(char));
    14. for (i = 0; i < n; i++) //初始化一个 [1,2,3,……,n] 数组
    15. nums[i] = i + 1;
    16. for (i = 0, k--; i < n; i++) { //k要先减去1
    17. factor = factorial(n - i - 1);
    18. res[j++] = nums[k / factor] + '0';
    19. deleteItem(nums, n - i, k / factor); //取出一个元素
    20. k %= factor;
    21. }
    22. return res;
    23. }

  • 相关阅读:
    13 英寸 MacBook Air 与 MacBook Pro 评比
    低代码平台权限管理设计实践
    【初阶C语言】操作符1--对二进制的操作
    【数学】尺规找椭圆中心和焦点
    一、音视频小白入门|搭建 FFmpeg你自己的直播平台
    前端进阶--深入理解JavaScript
    Django ORM 事务和查询优化
    (二)Vue组件化编程
    SpringBoot 常用读取配置文件的 3 种方法!
    单元测试的心法分享
  • 原文地址:https://blog.csdn.net/qq_52505851/article/details/126196953
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号