60. 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 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.
- Given k will be between 1 and n! inclusive.
Example 1:
Input: n = 3, k = 3 Output: "213"
Example 2:
Input: n = 4, k = 9 Output: "2314"
AC code:
class Solution {
public:
string getPermutation(int n, int k) {
string s(n, 0);
iota(s.begin(), s.end(), '1');
vector<int> fact(n, 1);
string ans(n, 0);
for (int i = n-3; i >= 0; --i)
fact[i] = (n - 1 - i) * fact[i+1];
k = k - 1;
for (int i = 0; i < n; ++i) {
int index = k / fact[i];
k = k % fact[i];
ans[i] = s[index];
s.erase(next(s.begin(), index));
}
return ans;
}
};
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Permutation Sequence.
std::iota
template <class ForwardIterator, class T> void iota (ForwardIterator first, ForwardIterator last, T val);
Store increasing sequence
Assigns to every element in the range [first,last) successive values of val, as if incremented with ++val after each element is written.
The behavior of this function template is equivalent to:
|
|
Parameters
- first, last
- Forward iterators to the initial and final positions of the sequence to be written. The range used is
[first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last. - val
- Initial value for the accumulator.
永远渴望,大智若愚(stay hungry, stay foolish)

浙公网安备 33010602011771号