zoukankan      html  css  js  c++  java
  • 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

    需要仔细一点

  • 相关阅读:
    Cheatsheet: 2013 12.01 ~ 12.16
    Cheatsheet: 2013 11.12 ~ 11.30
    Cheatsheet: 2013 11.01 ~ 11.11
    Cheatsheet: 2013 10.24 ~ 10.31
    Cheatsheet: 2013 10.09 ~ 10.23
    Cheatsheet: 2013 10.01 ~ 10.08
    Cheatsheet: 2013 09.22 ~ 09.30
    Cheatsheet: 2013 09.10 ~ 09.21
    Cheatsheet: 2013 09.01 ~ 09.09
    Cheatsheet: 2013 08.20 ~ 08.31
  • 原文地址:https://www.cnblogs.com/yalphait/p/10357592.html
Copyright © 2011-2022 走看看