zoukankan      html  css  js  c++  java
  • Leetcode | 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 (ie, 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.

    思路是对的,第1个数就是k/(n-1)!,k=k%(n-1)!,第二个数就是k/(n-2)!……

    注意这类取余操作得到的是以0开始计数。一开始要把k--。

    删除掉一个数之后,需要更新第i个数的值。这里用了一个数组,删掉一个数后,把后面的数往前移。

     1 class Solution {
     2 public:
     3     string getPermutation(int n, int k) {
     4         int a = 1;
     5         vector<int> kth(n); 
     6         
     7         for (int i = 1; i <= n - 1; ++i) {
     8             kth[i - 1] = i;
     9             a *= i;
    10         }
    11         kth[n - 1] = n;
    12         
    13         string ret = "";  
    14         n--; k--;
    15         while (n >= 1) {
    16             int v = k / a;                
    17             ret += '0' + kth[v];
    18             for (int i = v; i < n; ++i) kth[i]=kth[i+1];
    19             k = k % a;
    20             a = a / n;
    21             n--;
    22         }
    23         ret += '0' + kth[0];
    24         
    25         return ret;
    26     }
    27 };

    看了网上的代码,再重构了一下.

     1 class Solution {
     2 public:
     3     string getPermutation(int n, int k) {
     4         k--;
     5         int a = 1;
     6         vector<int> kth(n); 
     7         
     8         for (int i = 1; i <= n; ++i) {
     9             kth[i - 1] = i;
    10             a *= i;
    11         }
    12     
    13         string ret = "";  
    14         for (int i = 0; i < n; ++i) {
    15             a = a / (n - i);
    16             int v = k / a;
    17             k = k % a;
    18             ret.push_back(kth[v] + '0');
    19             for (int j = v; j < n - i - 1; ++j) kth[j] = kth[j + 1];
    20         }
    21         
    22         return ret;
    23     }
    24 };
  • 相关阅读:
    iOS开发之--将 "中文" 转化成 "拼音"
    iOS swift语言
    手势识别
    学习git
    iOS开发如何在外面拿到一个子控件的frame ????
    协议和代理的理解及使用
    iOS开发之----生成二维码
    组合数C(n,m)的四种求解方法
    求一个数的正数因子(模板)
    图论五:网络流
  • 原文地址:https://www.cnblogs.com/linyx/p/3730054.html
Copyright © 2011-2022 走看看