LeetCode – Permutation Sequnce 题解

LeetCode – Permutation Sequnce 题解Theset nbsp 1 2 3 n nbsp containsatot nbsp n uniquepermut Bylistingand Wegetthefoll ie for nbsp n nbsp 3 123 132 213 231 3

The set [1,2,3,…,n] contains a total of n! unique permutations.

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

Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

分析:

可以一个一个找next permulation 不过会超时

class Solution { private: void getBigger(vector 
  
    &numbers){ int pos = numbers.size() - 1; while(numbers[pos - 1] > numbers[pos]) pos--; pos--; int xpos = numbers.size() - 1; while(numbers[xpos] < numbers[pos]) xpos--; int x = numbers[xpos]; int t = numbers[pos]; numbers[pos] = numbers[xpos]; numbers[xpos] = t; int i = pos + 1, j = numbers.size() - 1; while(i < j){ t = numbers[i]; numbers[i] = numbers[j]; numbers[j] = t; i ++; j --; } } public: string getPermutation(int n, int k) { vector 
   
     numbers(n); for(int i = 1; i <= n; i++){ numbers[i - 1] = i; } for(int i = 1; i < k; i++) getBigger(numbers);//,printVector 
    
      (numbers); string ans; for(auto x : numbers){ char ch[25]; sprintf(ch,"%d",x); ans += string(ch); } return ans; } }; 
     
    
  

还可以直接算出来,比如5的排列中,前4! 个排列一定是1开头的,第二个4! 排列中一定是2开头的,依此类推。

class Solution { private: int getJieCheng(int m){ int ans = 1; for(int i = 1; i <= m;i ++){ ans *= i; } return ans; } public: string getPermutation(int n, int k) { vector 
  
    numbers; for(int i = 1; i <= n; i++) numbers.push_back(i); string ans; for(int m = n - 1; m >= 0; m--){ int l = getJieCheng(m); int i = 0; while(k > l){ k -= l; i++; } char ch[10]; sprintf(ch, "%d", numbers[i]); ans += string(ch); numbers.erase(numbers.begin() + i); } return ans; } }; 
  




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

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

(0)
上一篇 2026年3月16日 下午5:37
下一篇 2026年3月16日 下午5:37


相关推荐

  • 20款优秀的免费代码编辑器

    20款优秀的免费代码编辑器Atom.io(Win7、Win8、OSX10.8、Linux)免费GitHub开发的文本编辑器Atom发布了0.177.0版,其中一个引入注目的变化是从Node.js切换到了io.js。io.js是Node.js的分支,Node.js社区发生分裂后由核心开发者在2014年12月创建的,已经发布了v1.1版,目前开发非常活跃。Atom是切换到io.js的一个重量级项目。At

    2022年6月15日
    74
  • Android studio的gradle教程整理「建议收藏」

    Android studio的gradle教程整理「建议收藏」【Gradle教程】第一章:引言http://ask.android-studio.org/?/article/7【Gradle教程】第二章:概述http://ask.android-studio.org/?/article/6【Gradle教程】第三章:教程http://ask.android-studio.org/?/article/15【Gradle教程】第四章:安装…

    2022年6月28日
    28
  • Android下的配置管理之道之OpenGrok代码索引环境搭建[通俗易懂]

    Android下的配置管理之道之OpenGrok代码索引环境搭建[通俗易懂]1OpenGrok介绍OpenGrok是一个快速,便于使用的源码搜索引擎与对照引擎,它能够帮助我们快速的搜索、定位、对照代码树.接下来就具体讲解一下OpenGrok的安装及使用.2安装OpenGrok所需依赖RequirementsYouneedthefollowing:JDK1.8orhigherOpenGrok”’binar…

    2022年6月9日
    35
  • 51单片机入门教程(5)——定时器中断

    51单片机入门教程(5)——定时器中断51 单片机入门教程 5 定时器中断一 中断的概念二 定时器中断 2 1 软件延时的不足 2 2 中断寄存器 2 2 1 中断允许控制寄存器 IE2 2 2 定时器工作方式寄存器 TMOD2 2 3 定时器控制寄存器 TCON2 2 4 定时器初值寄存器 THx TLx2 3 定时器中断程序写法写在开头 中断是包括单片机在内的所有微处理器很重要的功能之一 初学单片机必须这一部分的知识 一 中断的概

    2025年11月17日
    4
  • 一气之下,我一行代码搞定了约瑟夫环问题,面试官懵了[通俗易懂]

    一气之下,我一行代码搞定了约瑟夫环问题,面试官懵了[通俗易懂]大家好,我是帅地。对于约瑟夫环问题估计大家都听说过,除非你刚刚读大一,因为在大一大部分学校的课本都会降到这个算法题。为了以防万一你没听过,我还是给下问题的描述问题描述:编号为1-N的N个士兵围坐在一起形成一个圆圈,从编号为1的士兵开始依次报数(1,2,3…这样依次报),数到m的士兵会被杀死出列,之后的士兵再从1开始报数。直到最后剩下一士兵,求这个士兵的编号。记得有一次,貌似是阿里的面试,面试官给了我一到原汁原味的约瑟夫好,好家伙,看我不把你秀一把。不过,作为一个有着几十场面

    2022年6月4日
    39
  • 如何新建vue项目(如何配置vue的开发环境)

    一、vue开发环境搭建1、安装nodejs步骤:在node官网(https://nodejs.org/en/download/)选择跟自己的电脑匹配的版本进行下载,然后一步步的安装即可,在cmd控制台输入node-v,如果出现版本信息即表示安装成功。2、npm包管理器是集成在node中的,所以直接输入npm-v就能查看到版本信息,若出现版本信息则表示npm能正常使用。3、输入npminstall-gcnpm–registry=http://registry.npm.taobao.o

    2022年4月15日
    77

发表回复

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

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