19.2.9 [LeetCode 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:

  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

需要仔细一点

posted @ 2019-02-09 16:09  TobicYAL  阅读(231)  评论(0编辑  收藏  举报