关于排列的题目要分清楚里面的逻辑关系。
假设现在剩余的字符数组为nums
要取第k个排列,那么,第i位,取得就是nums里面的(k-1)/(i-1)! + 1位。
class Solution {
public:
string getPermutation(int n, int k) {
string result = "";
vector<int> fact(n + 1, 1);
for(int i=1; i<=n; i++){
fact[i] = fact[i-1] * i;
}
vector<char> nums(n, '0');
for(int i=0; i<n; i++){
nums[i] = nums[i] + i + 1;
}
for(int i=n; i>=1; i--){
int id = (k - 1) / fact[i-1] + 1;
result.push_back(nums[id - 1]);
nums.erase(nums.begin() + id - 1);
k = (k - 1) % fact[i-1] + 1;
}
return result;
}
};
1118

被折叠的 条评论
为什么被折叠?



