题目描述
集合[1,2,3,…,n]一共有n!种不同的排列
按字典序列出所有的排列并且给这些排列标上序号
我们就会得到以下的序列(以n=3为例)
- "123"
- "132"
- "213"
- "231"
- "312"
- "321"
现在给出n和k,请返回第k个排列
注意:n在1到9之间
The set[1,2,3,…,n]contains a total of n! unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
- "123"
- "132"
- "213"
- "231"
- "312"
- "321"
Given n and k, return the k th permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
答案
class Solution {
public:
string getPermutation(int n, int k) {
int i;
vector<char> nums;
for (i = 1; i <= n; i++) nums.push_back('0' + i);
vector<int> jc(n + 1, 1);
for (i = 1; i <= n; i++) jc[i] = i * jc[i - 1];
string res;
for (i = 0; i < n; i++)
{
int size = jc[n - i - 1];
int index = k % size == 0 ? k / size - 1 : k / size;
res += nums[index];
nums.erase(nums.begin() + index);
k -= index * size;
}
return res;
}
};