Permutation Sequence(leetcode)
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.
代码:
class Solution {
public:
string getPermutation(int n, int k) {
int len = 1;
int now_num = 0;
string str("");
int count = n;
vector<int>per(n);
for (int i = 0; i < n; i++) {
per[i] = i+1;
}
while (true) {
if (count == 1) {
str += char(per[0] + 48);
break;
}
for (int i = 1; i <= count-1; i++) {
len *= i;
}
if (k % len == 0) {
now_num = k / len;
} else {
now_num = k / len + 1;
}
str += char(per[now_num-1] + 48);
per[now_num-1] = INT_MAX;
sort(per.begin(), per.end());
count--;
if (k % len != 0) {
k %= len;
} else {
k -= len * (now_num-1);
}
len = 1;
}
return str;
}
};