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"
题意
求出n个连续数的第k个permutation sequence
题解
1 class Solution { 2 public: 3 string getPermutation(int n, int k) { 4 if (n <= 1)return "1"; 5 vector<int>constn(n+1, 0); 6 vector<char>nums(n + 1); 7 int mult = 1; 8 for (int i = 1; i <= n; i++) { 9 mult *= i; 10 constn[i] = mult; 11 nums[i] = i + '0'; 12 } 13 string ans = ""; 14 n--; 15 int _n = n; 16 while(n>1) { 17 int idx; 18 if(k%constn[n]==0) 19 idx = k / constn[n]; 20 else 21 idx = k / constn[n] + 1; 22 ans += nums[idx]; 23 nums.erase(nums.begin() + idx); 24 k = k % constn[n]; 25 n--; 26 if (k == 0)break; 27 } 28 if (k == 1) { 29 ans += nums[1]; 30 ans += nums[2]; 31 } 32 else if (k == 2) { 33 ans += nums[2]; 34 ans += nums[1]; 35 } 36 else { 37 for (int i = n+1; i >= 1; i--) 38 ans += nums[i]; 39 } 40 return ans; 41 } 42 };
需要仔细一点