LeetCode-60. Permutation Sequencehttps://leetcode.com/problems/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.
Example 1:
Input: n = 3, k = 3 Output: "213"
Example 2:
Input: n = 4, k = 9 Output: "2314"
Example 3:
Input: n = 3, k = 1 Output: "123"
Constraints:
1 <= n <= 9
1 <= k <= n!
解题思路
【C++】
class Solution {
public:
string getPermutation(int n, int k) {
vector<int> factorial(10);
factorial[0] = 1;
for (int i = 1; i < factorial.size(); ++i) {
factorial[i] = factorial[i-1] *(i);
}
k--;
string num = "123456789";
string res;
while (n--) {
int num_loc = k/factorial[n];
res += num[num_loc];
k %= factorial[n];
num.erase(num_loc,1);
}
return res;
}
};
减少一点空间压力
class Solution {
public:
string getPermutation(int n, int k) {
vector<int> numbers;
int fact = 1;
for(int i=1;i<n;i++){
fact *= i;
numbers.push_back(i);
}
numbers.push_back(n);
k--;
string res = "";
while(true){
res += to_string(numbers[k/fact]);
numbers.erase(numbers.begin()+k/fact);
if(numbers.empty()){
break;
}
k = k%fact;
fact = fact/numbers.size();
}
return res;
}
};
【Java】
class Solution {
public String getPermutation(int n, int k) {
String res = "";
List<Integer> num = new LinkedList<>();
int[] fac = new int[10];
fac[0] = 1;
for (int i=1; i<=n; i++) {
fac[i] = fac[i - 1] * i;
num.add(i);
}
k--;
while (n-- > 0) {
int index = k / fac[n];
k %= fac[n];
res += num.get(index);
num.remove(index);
}
return res;
}
}