Permutation Sequence
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):
1. “123”
2. “132”
3. “213”
4. “231”
5. “312”
6. “321”
Given n and k, return the kth permutation sequence.
思路:
思路是比较清楚的。用num=(k-1)/(i-1)!来计算第i位的数字,注意这个数字表示剩余的数字中最小的第num位,由于每次用掉一个数之后,就不能再用这个数了,因此用vector的erase功能还是比较方便的。开始用数组写,怎么都搞不定。。
class Solution {
public:
string getPermutation(int n, int k) {
string res;
vector<int> levels;
vector<int> nums;
levels.push_back(1);
nums.push_back(1);
for(int i=1;i<n;i++)
{
levels.push_back(levels[i-1]*i);
nums.push_back(i+1);
}
int num=0;
for(int i=n-1;i>=0;i--)
{
num=(k-1)/levels[i];
k=k-num*levels[i];
res.push_back('0'+nums[num]);
nums.erase(nums.begin()+num);
}
return res;
}
};