leetcode做题笔记60

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

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

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

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

思路一:模拟排序返回第k个排序

int getFactorial(int n)
{
    int res = 1;
    for(int i = 1;i

时间复杂度O(n),空间复杂度O(n)

分析:

本题要求第k个排序,可想到先将1到n的字符先放到数组中,再根据所给的k值调换各个数字顺序,最后返回正确答案。每次移动的时候先计算当前位置的阶乘,利用该值除k-1得到所要移动的数的位置,对k-1取余得到还有多少步,最后当0 == iTmpB时返回res

总结:

本题考察对字符串的应用,理解如何排序并编写数字移动的代码即可解决

你可能感兴趣的:(字符串的应用,递归,leetcode,笔记,算法)