zoukankan      html  css  js  c++  java
  • 60. Permutation Sequence

    """
    60. Permutation Sequence
    Medium
    
    621
    
    170
    
    Favorite
    
    Share
    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个互不相同的自然数,分别是1,2,3...n,组合成数字的集合,有n!中可能,按照从小到大的顺序依次排列并编号为1,2,3,...n!,

    给定一个n和序列号k(1<=k<=n!)请求第k个数字的字符串

    想到的方法:

    1,有办法求得数字组合的下一个,这样求k次,算法复杂度大约是knlgn(我也不确定,算出来大约是k(lg1+lg2+...+lgn)),也就是(n^2)lgn

    2,可以观察根据第一个数字均匀分为了n种,总可能是n!种,因此可以将k-1和(n-1)!的商来确定首字母,根据余来确定剩下数字的排列可能性中的位置,这样算法复杂度就是o(n!)

    下面是我的代码

    class Solution:
        def getPermutation(self, n, k):
            """
            :type n: int
            :type k: int
            :rtype: str
            """
            if not n:
                return ""
            result = ""
            nums = [i for i in range(1, n+1)]
            numsfactorial = [1]
            for i in range(1, n):
                numsfactorial.append(numsfactorial[-1]*i)
            for i in range(n, 0, -1):
                j = (k-1)//numsfactorial[i-1]
                k = (k-1)%numsfactorial[i-1] + 1
                result += str(nums[j])
                del nums[j]
            return result
  • 相关阅读:
    javascript与XML
    错误调试
    Js节点操作
    vue渲染时对象里面的对象的属性提示undefined,但渲染成功
    html5脚本编程
    用canvas把页面中所有元素的轮廓绘制出来
    HTTP的三次握手
    http协议的发展历史
    5层网络模型介绍
    http主要内容流程介绍
  • 原文地址:https://www.cnblogs.com/mangmangbiluo/p/10170737.html
Copyright © 2011-2022 走看看