力扣算法题—060第K个排列

力扣算法题—060第K个排列

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

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

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

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

说明:

  • 给定 n 的范围是 [1, 9]。
  • 给定 的范围是[1,  n!]。

示例 1:

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

示例 2:

输入: n = 4, k = 9
输出: "2314"
 1 #include "_000库函数.h"
 2 
 3 //一打眼看到题目描述,就想起用排列算法
 4 //时间有点长588ms
 5 
 6 class Solution {
 7 public:
 8     string getPermutation(int n, int k) {
 9         vector<int>v;
10         for (int i = 1; i <= n; ++i)
11             v.push_back(i);
12         --k;
13         while (next_permutation(v.begin(), v.end()) && --k);
14         string s = "";
15         for (auto a : v)
16             s += a + '0';
17         return s;
18     }
19 };
20 
21 //用一下递归
22 class Solution {
23 public:
24     string getPermutation(int n, int k) {
25         vector<int>v;
26         for (int i = 1; i <= n; ++i)
27             v.push_back(i);
28         Combin(v, 1, 0);
29         string s = "";
30         for (auto a : v)
31             s += a + '0';
32         return s;
33     }
34     void Combin(vector<int>&v, int k, int s) {
35         if (!k)return;
36         if (s >= v.size())--k;        
37         for (int i = s; i < v.size(); ++i) {
38             swap(v[i], v[s]);
39             Combin(v, k, s + 1);
40             swap(v[i], v[s]);
41         }
42     }
43 };
44     
45 //博客答案,没怎么看懂
46 //后期看懂再更新
47 //12ms
48 class Solution {
49 public:
50     string getPermutation(int n, int k) {
51         string res;
52         string num = "123456789";
53         vector<int> f(n, 1);
54         for (int i = 1; i < n; ++i) f[i] = f[i - 1] * i;
55         --k;
56         for (int i = n; i >= 1; --i) {
57             int j = k / f[i - 1];
58             k %= f[i - 1];
59             res.push_back(num[j]);
60             num.erase(j, 1);
61         }
62         return res;
63     }
64 };
65 
66 
67 void T060() {
68     Solution s;
69     cout << s.getPermutation(3, 3) << endl;
70     cout << s.getPermutation(4, 9) << endl;
71 }

 

转载于:https://www.cnblogs.com/zzw1024/p/10655043.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101001.html原文链接:https://javaforall.net

(0)
上一篇 2021年7月4日 下午12:00
下一篇 2021年7月4日 下午1:00


相关推荐

  • maven 本地仓库配置_maven默认的本地仓库

    maven 本地仓库配置_maven默认的本地仓库一、maven配置本地仓库路径1.打开安装好的maven目录2.进入conf–>编辑settings.xml文件3.修改<localRepository>找到并修改<localRepository>,最初是注释掉的,取消注释就可以 <localRepository>你想存放的本地仓库路径</localRepository>(不修改默认${user.home}/.m2/repository这个路径)二、配置中央仓库我这里用的阿里

    2025年11月28日
    33
  • c语言运行后电脑很卡,如何让电脑提速,电脑卡是什么原因?

    c语言运行后电脑很卡,如何让电脑提速,电脑卡是什么原因?前言昨天的文章被限制了,正在申诉刚好最近有网友问小编这样一个问题:花了六千买的独显笔记本,用了才一年就卡的不行了,请问电脑卡是什么原因?小编对电脑还算颇有研究,看了网友电脑配置并不算低,导致电脑卡的原因主要在于系统优化与一些硬件方面的问题,下面小编就来说说如何让电脑提速。正文电脑卡是什么原因?导致电脑卡的原因有很多,综合来看,无非就是软件与硬件的问题。其中,软件层面主要是系统优化,硬件方面则主要是…

    2022年6月7日
    42
  • Windows驱动程序开发基础(四)驱动的编译调试和安装

    Windows驱动程序开发基础(四)驱动的编译调试和安装Windows 驱动程序的编译调试安装

    2026年3月26日
    2
  • Python安装Pytorch教程(图文详解)「建议收藏」

    Python安装Pytorch教程(图文详解)「建议收藏」最近人工智能等多门课需要复现论文,近两年的论文很多都是Pytorch环境,所以,这里总结一下Pytorch的安装教程,做好最快、最简单、最好地完成安装。本机环境Win10+1050Ti+Python3.7+1、查看本机的CUDA版本1、打开NVIDIA的控制面板,在开始菜单里面的NVIDIAControlPanel2、在如下界面,帮助—>系统设置3、出现系统信息如下4、然后选择组件,然后看到蓝色的那一行就是英伟达的CUDA版本,可以看到我的是11.1.114

    2022年6月24日
    57
  • visual studio发生了未处理的异常_打印显示灾难性故障

    visual studio发生了未处理的异常_打印显示灾难性故障【IDE-VisualStudio】灾难性故障(异常来自HRESULT0x8000FFFFEUNEXPECT

    2025年11月27日
    3
  • java treeset subset_Java TreeSet subSet()方法

    java treeset subset_Java TreeSet subSet()方法JavaTreeSetsubSet()方法java.util.TreeSet.subSet(EfromElement,EtoElement)方法用于返回位于给定范围(包括fromElement和不包括toElement)之间的一组元素。1语法publicSortedSetsubSet(EfromElement,EtoElement)2参数fromElement:这是返回集的最…

    2025年6月16日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号