码迷,mamicode.com
首页 > 编程语言 > 详细

算法:60.第k个排列

时间:2018-05-31 15:30:59      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:solution   https   detail   seq   ble   size   --   src   inf   

解答参考: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个排列

标签:solution   https   detail   seq   ble   size   --   src   inf   

原文地址:https://www.cnblogs.com/zf-blog/p/9116783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!