LEETCODE60——第K个排列

Posted 单纯的心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LEETCODE60——第K个排列相关的知识,希望对你有一定的参考价值。

 1 class Solution {
 2 public:
 3     string getPermutation(int n, int k) {
 4         string ans(n, 0);
 5         vector<bool> flag(n, false);
 6         int count = 1;
 7         for (int i = 1; i < n; i++)
 8             count *= i;
 9         int m;
10         int m_f;
11         int index = 0;
12         k = k - 1;
13         while (index <n-1)
14         {
15             m = k / count;
16             m_f = 0;
17             for (int i = 0; i <= m; i++, m_f++)
18             {
19                 while (flag[m_f])
20                     m_f++;
21             }
22             m_f--;
23             flag[m_f] = true;
24             ans[index] = m_f + 1+ 0;
25             index++;
26             k = k % count;
27             count = count / (n - index );
28         }
29         int i = 0;
30         while (flag[i])
31             i++;
32         ans[n - 1] = i + 1 + 0;
33         return ans;
34         
35         
36     }
37 };

总结:几乎是用找规律算出来的,再次写,未必能流畅写下来。

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

以上是关于LEETCODE60——第K个排列的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 每日一题 60. 第k个排列

leetcode 每日一题 60. 第k个排列

LEETCODE60——第K个排列

算法:60.第k个排列

LeetCode 60第k个排列

笔试题73. LeetCode OJ (60)