1. 程式人生 > >19.2.9 [LeetCode 60] Permutation Sequence

19.2.9 [LeetCode 60] Permutation Sequence

pla else aps img src -- pre list const

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:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "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 };
View Code

需要仔細一點

19.2.9 [LeetCode 60] Permutation Sequence