算法: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个排列的主要内容,如果未能解决你的问题,请参考以下文章