算法: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;  
    }
};

猜你喜欢

转载自www.cnblogs.com/zf-blog/p/9116783.html