题目:
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 kth
permutation sequence.Note: Given n will be between 1 and 9 inclusive.
解题思路:
- n个数字有n!种全排列 所以求第k个 就是要求 第 k%n! 个;
- 而 每种数字开头的排列有 n!/n = (n-1)!个 所以,k/(n-1)! 可以获得 第k个全排列是以第几个数开头的。
- 同理 用k%(n-1)! 可以得到第K个全排列是以某个数字开头的 全排列中的第 几个;
- 重复上述的问题
class Solution{
public:
string getPermutation(int n, int k) {
k--; //差点忘记了k=1时是不用处理的
vector<int> nums;
int round =1;
for(int i=1;i<=n;i++){
nums.push_back(i);
round =round * i; //n!
}
string res; //输出
int cur_digit=n; //当前处理的位数
while(cur_digit>0){
round =round/cur_digit; // 每种数字开头的排列有 n!/n = (n-1)!个
int index =k/round; //k/(n-1)! 以第几个数开头
k= k%round;
res+=(nums[index]+'0'); //将第cur_digit位 存入res
nums.erase(nums.begin()+index);
cur_digit --; //下一位
}
return res;
}
};