算法:60.第k个排列

Posted outthinker

tags:

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

解答参考:https://blog.csdn.net/lqcsp/article/details/23322951

题目链接:https://leetcode-cn.com/problems/permutation-sequence/description/

题目描述:

代码见下:

class Solution {
public:
    string getPermutation(int n, int k) {
        vector<int> num(n, 0);  
      int perm_sum = 1;  
      for(size_t i = 0; i < n; ++i)  
      {  
        num[i] = i + 1;  
        perm_sum *= (i + 1);  
      }  
      string ret;  
      //因为数组是从0到n-1的 所以基数从 0到k-1  
      --k;  
      for(size_t i = 0; i < n; ++i)  
      {  
        perm_sum = perm_sum / (n - i);  
        int selected = k / perm_sum;  
        ret.push_back(num[selected] + \'0\');  
        //选择一个数后重新构造剩下的数组  
        for(size_t j = selected; j < n - i - 1; ++j)  
          num[j] = num[j + 1];  
        k = k % perm_sum;  
      }  
      return ret;  
    }
};

 

以上是关于算法:60.第k个排列的主要内容,如果未能解决你的问题,请参考以下文章

60. 第k个排列

[leetcode] 60. 第k个排列

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

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

LEETCODE60——第K个排列

60. 第k个排列